退屈なことはPythonにやらせよう の望遠鏡版 その2~ss-oneの時刻を設定する

第2弾は、SS-one AutoGuider proの時刻を設定する。です。

ss-oneの時刻設定はちょっと大変
ss-oneに限らず、raspberry pi (ラズパイ)は内蔵時計を持っていないため、時刻がずれてしまいがちです。
インターネットに接続できる環境であればNTPサーバと時刻同期できるのですが、そもそも、ss-oneは単独で使うことが多いので対策が必要です。

方法その1: SkySafariを使って、スマホの時刻と同期する方法
 これが一番簡単かも。でも、SkySafari Plus or Proを購入しなければなりません。

方法その2: ss-oneにログインして、dateコマンドで設定する方法
 一番ベーシックな方法ですが、少し面倒です。

  1. TeraTermで ss-one にSSHでログイン。ユーザは前に説明したsspiを使います。
  2. dateコマンドで時刻を設定します。
$ sudo date -s "2020/08/09 10:00:00 JST"
[sudo] password for sspi: <パスワードを入力>
Sun Aug  9 01:00:00 UTC 2020

 ちなみに、ss-oneはタイムゾーンUTC協定世界時)なので、JST日本標準時)で設定すると-9時間の時間差で表示されます。

ss-oneの時刻をPCと同期する。
というわけで、今回はss-oneの時刻設定を自動化します。

このPythonのプログラムで、ss-oneの時刻とPCの時刻を同期します。
実行する際にはparamikoがないとエラーで怒られますので、その際には pip でparamikoをインストールしてください。

import paramiko
import datetime

with paramiko.SSHClient() as ssh:
    hostname = '192.168.2.102'
    port=22
    username='sspi'
    password='<パスワード>'

    def __exec_command(command, mode = ''):
        if mode == 'sudo':
            # eg. echo <password> | sudo -S <command>
    	    command = 'echo ' + password + ' | sudo -S ' + command;

        print('\n$ ' + command)
        stdin, stdout, stderr = ssh.exec_command(command)

        for o in stdout:
            print(' ', o, end='')
        for e in stderr:
            if '[sudo] password for' not in e:
                print('[err]', e, end='')

if __name__ == "__main__":

    # paramikoの初期設定(SSH)
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # sshで接続
    ssh.connect(hostname, port, username, password)

    # hostnameを表示
    __exec_command('hostname')

    # raspberry pi の時刻設定
    dt_now = datetime.datetime.now()
    str_time = dt_now.strftime('%Y/%m/%d %H:%M:%S')
    __exec_command('date -s "' + str_time + ' JST"', 'sudo')

    # 設定された時刻を表示
    __exec_command('date')

    print('\ndate & time changed.')
    input(' Press ENTER to exit.')

このpyファイルを実行すると、実行結果は、こんな感じです。
f:id:cloudynight:20200809074648g:plain

前回同様、デスクトップ等にショートカットを作っておくと便利です。

では。