スロットル操作を検知する [JMRI]
現在スロットルの状態変化を記録する方法を探っています。手始めに今回はスロットルの操作を検知してみました。
import jmri class ThrottleListener(java.beans.PropertyChangeListener): def propertyChange(self, event): ......(1) print "propertyname:", event.propertyName print "oldvalue:", event.oldValue print "newvalue:", event.newValue class LoadThrottle(jmri.jmrit.automat.AbstractAutomaton) : ......(2) def init(self): global throttle......(3) throttle = self.getThrottle(301, True) if throttle == None : print "Couldn't assign throttle!" throttleListener = ThrottleListener() throttle.addPropertyChangeListener(throttleListener) return def handle(self):......(4) return False LoadThrottle().start()......(5)
スロットルの状態が変化するとpropertyname(スピード、方向、ファンクションなど値の種類)、oldvalue(変化前の値)、newvalue(変化後の値)をscript outputに出力するサンプルです。
検知にはセンサーの反応検知に使ったリスナーを利用しました。propertyChangeメソッド
(1)に反応時の処理を記述しています。
throttleオブジェクトの生成にはAbstractAutomatonクラス(2)を利用します。jmriサンプルスクリプトのthrottles.pyを参考にしたので以前の方法(Pythonで電車を動かす)とは少し定義の仕方が異なります。
今回はthottleをグローバル変数として定義(3)しました。そのためLoadThrottleクラスのインスタンスは不要になるので直接実行(5)しています。また今回はthrottleオブジェクトの生成だけが目的なのでhandleメソッド(4)にはreturn Falseのみ記述します。
コメント 0