ヴァイサラ PTU300という圧力センサーからデータをダウンロードするための Python コードを書きたいと思います。このセンサーはルーターに接続し、telnet セッションを介して接続できます。このセッションでは、単純なコマンドが要求に応じてデータを吐き出すか、連続したデータ ストリームを吐き出すことができます。マニュアルの 94 ページには、機器に送信できるコマンドがリストされています。私はPythonにはまったく慣れていませんが、Fortranでのプログラミング経験があるので、プログラミング言語の構造を理解しています。
これを行うためにどのモジュールを実装する必要があるかについて、誰かが私を助けてくれることを望んでいました。このトピックについて少し調査したところ、関連するこれらの過去の質問が見つかりました ( How can I use python's telnetlib to fetch data from a device for a fixed period of a device? , How to save the output of a telnet command by Python を無限に使用する [終了] )。
次のコマンドを使用して、telnetlib を使用して機器に接続しようと試み始めました。
システムをインポート
telnetlib をインポート
ホスト = 'xxx.xxx.xxx.xxx'
tn=telnetlib.Telnet(ホスト)
tn.open
tn.write('r')
tn.read_very_eager()
これにより、1 行のデータが読み取られます。
例えば
2000-01-06 23:43:04 P= 980.0 T= -4.3 'C \r\n>r
ただし、後続の tn.read_very_eager() は何も返しません。
この読み取りコマンドでさまざまな[バリエーション][4]を試しました。
tn.read_until('C')
しかし、その後の読み取りでは何も返されません。「ブロッキング」が発生している可能性があると思いますか?私はそれが何であるかを本当に知っているわけではありません。
私はまた、
tn.write('送信')
tn.read_until('C')
しかし、これは 1 つの読み取り値のみを返し、その後の読み取りは何も返しません。
[1][5] 過去のスタックオーバーフローの質問で、[asynchat][6] または [socket][7] モジュールを使用してこの種のアクションを実行することが提案されました。私はまだそれらを使用してみませんでした。人々はこれがより良い攻撃方法だと思いますか? 機器に接続するためにユーザー名やパスワードは必要ありません。
だから私の質問は、どうすればこの楽器に最適に接続できますか(どのパッケージ、telnetlib、asynchat、ソケット)?
telnet 接続がブロックされないようにするにはどうすればよいですか? (つまり、1 行のデータしか取得できない)?
アドバイスをいただければ幸いです。この質問が既に回答されている場合はお詫びします。
よろしく
オマーン
ps、申し訳ありませんが、すべてのリンクを添付することはできません