AutomationConnectIQ-サンプル13

Automation Connect IQ SDK

Ver0.3で追加したものに関しての説明。

Activity Monitorのテーブルを編集する機能

using namespace AutomationConnectIQ.Lib;
$sdk = New-Object GarminSDK -Property @{
	Key = "H:\Develop\Garmin\key\developer_key"
}
$sim = New-Object Simulator($sdk)
$sim.WaitForInput()

$monitor = $sim.CreateActivityMonitor()
$monitor.Open()
$monitor.SetActiveMinutesGoal(123)

$monitor.SetValue($true, 0, 0, 300)
$monitor.SetValue($true, 0, 1, 5050)
$monitor.SetValue($true, 0, 5, 5)
$monitor.SetValue($true, 0, 6, 6)
$monitor.SetValue($true, 0, 7, 7)
$monitor.SetValue($true, 0, 8, 8)
$monitor.SetValue($true, 0, 9, 9)
for ($row = 0; $row -lt 7; $row++) {
	for ($column = 0; $column -lt 9; $column++) {
		$monitor.SetValue($false, $row, $column, $row * 10 + $column)
	}
}
$monitor.Ok()

$sim.FastForward(5)

上記を実行すると、以下のような画面になる。

  • 8,9行目:Activity Monitor画面を表示する処理
    考え方としてはTime Simulationのクラス似ている。Openで画面を表示するが、モーダル画面になるので、Ok/Cancelメソッドで設定、取消を行う。
    上記の例では、24行目のOkで設定内容を反映している。
  • 10行目:Weekly Active Minutes Goalの設定
  • 12~23行目:Today~7Days Agoまでのデータ設定を行うコード
    第1引数が、上(Today)のグリッドか下(Yesterday以降)のグリッドかを指定する。$Trueが上のグリッドになる。
    第2、第3がグリッド内の位置を示し、第4引数が設定する値になる。
  • 26行目:シミュレーターのFast Forwardを動作させるメソッド

注意事項とChecker.Checkの引数変更について

public bool Check(string device, Simulation func, PrePostAction pre = null)

第3引数を追加。ここにシミュレーターにプログラムをロードする前にシミュレーターを動かすための関数を与えられるようにした。

Activity MonitorのTodayのStepsはSteps Per MinutesとFast Forward、あと設定後の経過時間で値が決まる。
またシミュレーター起動後は0リセットできないという問題がある。

そのため、画面をキャプチャする場合にStepsを固定値にするには、シミュレーター起動直後、プログラムをロードする前に決定させてしまう必要があると感じた。

全デバイスに対して行うCheckメソッドにはpreを設定するようにさせていたのだが、単独デバイス側にはそのパラメータはなかった。そこで単独デバイスについてもpreを登録可能なようにした。
デフォルトはnullとしV0.2と同じ呼び出しが可能としてある。

Stepsの固定方法

初めに「StepsはSteps Per MinutesとFast Forward、あと設定後の経過時間で値が決まる」と書いてあるが、「設定後の経過時間で値が決まる」というのが厄介な部分。
Stepsに大きな値、例えば表示させる桁数に余裕があるかを調べるために5ケタの数値を設定する場合、Steps Per Minutesに300とかの設定可能な最大値を入れてしまうと、設定直後から秒単位にStepsが増えていき、希望する値にすることが困難になる。

そこで、Stepsを希望の値にする場合、Steps Per Minutesに1を設定し、Fast Forwardの呼び出しを指定したい値になる様に繰り返し呼び出すという方法をとる。
ただFast Forwardの設定も最大で600までしか設定できないため、指定した値になるため、複数回Fast Forwardを呼び出すことになる。

具体的には以下のようなコード

using namespace AutomationConnectIQ.Lib;
$sdk = New-Object GarminSDK -Property @{
	Key = "H:\Develop\Garmin\key\developer_key"
}
$sim = New-Object Simulator($sdk)
$sim.WaitForInput()

$monitor = $sim.CreateActivityMonitor()
$monitor.Open()
$monitor.SetValue($true, 0, 0, 1)
$monitor.Ok()
$count = 12345
for (; $count -gt 600; $count -= 600) {
	$sim.FastForward(600)
}
$sim.FastForward($count)

$monitor.Open()
$monitor.SetValue($true, 0, 0, 0)
$monitor.Ok()
  • 9~11行目:Steps Per Minutesを1にする
  • 12~16行目:指定したStepsになるまでFast Forwardを呼び出す
    この部分の処理が1分以内に納まるようにするのが望ましい。
    1分以上かかる場合、経過時間でのカウントがされるので、想定したStepsにならない場合がある。
  • 18~20行目:Steps Per Minutesを0にして、経過時間でStepsが増えるのを防止する

コメント

タイトルとURLをコピーしました