Rapid Express

Rapid Express

中小企業を支援するLinuxベースのWebアプリケーション開発

Rapid Express RSS Feed
 
 
 
 

Advanced/W-ZERO3[es]で、UKTenkiをサスペンド中に更新する

バイク通勤なのでTodayに天気予報を表示させることは命の次に大事なわけですが、これがなかなか遠い道のりだったので、久々のブログ更新ネタとします。

SCRN0001.JPG

mpToday
UK-TaniyamaさんのUKTenkiのデータを利用してTodayに今日・明日の天気を表示します。6時間ごとの降水確率も一緒に表示しますから目的にぴったりと合致です。
おまけとして、5時、11時、17時の気象データ更新時にUKTenkiを自動起動して情報を収集する機能があります(UKTenkiには一定間隔の巡回しかない)。しかし、サスペンド中は機能せずに復帰時にUKTenkiが起動することになり、アドesを使おうと思って電源を入れたときに煩わしさ100倍です。

UKTenki
UK-Taniyamaさんの天気予報データ取得ソフトです。コレ単体にもToda表示がありますが、アドes画面では小さすぎて見えません。mpTodayと同時に表示させておけば、週間予報も何となく目に入るし、UKTenkiの起動ショートカットの代わりにもなります。
前述の通り、自動更新機能がありますが、一定間隔での巡回でしかもサスペンド中は機能しません。

 

ということで、毎朝、お目覚め前にひっそりとデータ更新させるには、さらに次の道具が必要になるのでした。

AppScheduler
システムのタスクスケジュールにプログラムを1回だけ実行するように登録するコマンドラインツールです。
1回だけの実行タスクしか登録できないのはWindows Mobileの仕様です。UKTenkiの自動実行と同時に、次回の実行タスクを登録するようなバッチ処理を作成して登録する必要があります。

execmulti
iniファイルに記述した処理を連続して実行するバッチプログラムです。UKTenkiの実行と、次回の実行タスクの登録を同時に行うバッチを作成します。

WakeApp
なくても構わないのですが、タスクスケジュールがきちんと出来たかどうか(次回の実行時まで待たずに)確認するには、このツールが必要になります。

その他
wifictrl:無線のON/OFFをします。自宅内の無線LAN環境では無駄なバケット代を省きませう。
copyfile、AppCloseByClass:いずれもAppSchedulerと同じ作者さんによるもので、バッチ処理の中で使用します。
AutoConnect3:UKTenki単体は自動ダイアルアップしてくれませんのでコレが必要です。

 

■しかしAppSchedulerでもサスペンド中は更新できず?

バッチのサンプルは、AppSchedulerのドキュメントに詳しく載っています。作者さんは、ずばりUKTenkiの自動更新をさせる目的でこのツールを作成しているからです。

ところが、サンプルの通りを実行しても、アドesではサスペンド中の自動更新ができません。サスペンドから復帰したときにコマンドが実行されてしまい、これではmpTodayによる更新と変わりありません。
WM6でタスクスケジュールの仕様が変更されてしまったようです。

AppSchedulerのサポート掲示板で相談し、テストプログラムを作成していただいたり、結果をレポートしたりやり取りを続けた末、ふと起動時巡回設定のUKTenki.exeだけをAppSchedulerで登録してみたところ、画面スリープ状態の裏でUKTenkiがちゃんと動作していることが判明しました。

  • UKTenki.exe単体を実行させると、指定時刻に画面スリープの裏で動作している。
  • サンプルスクリプトを実行させると、サスペンド復帰後からUKTenkiが動き出す。
  • サンプルスクリプトの前後にwifictrl.exeを追加した場合、指定時刻に無線ランプが点灯するが、スクリプトはそこで止まっていて、サスペンド復帰後からその続きが実行される。
  • スクリプトによっては、何も実行されずにイベントだけ消えることもある。

というようなことから、execmultiのスクリプト中で使用しているsleep命令が原因なのでは?と推測できました。たぶんexecSync命令も怪しいです。

 

■アドes用スクリプト

sleepが使えないと基本的にバッチスクリプトは成立しません。
execSyncが使えたとして、たとえばAppCloseByClassによるアプリの終了などにexecSyncを使っても、動作の終了を待つことはなりません。AppCloseByClassがアプリ終了命令を出したところでexecSyncは次の処理に進んでしまいますが、実際のアプリ終了はその後で実行されるからです。

トリッキーな方法をあれこれ考えるよりも確かな方法は、1つずつの手順をすべて時間指定のイベントタスクとして登録してしまうことです。
定刻の05分にUKTnekiを実行する場合、前後あわせて3分間の次のようなタイムテーブルとなります。

指定時刻 イベントの内容
04分 無線スイッチのON
04分 巡回用uktenki.iniのコピー
05分 UKTenki.exe -Q の実行
06分 無線スイッチのOFF
06分 UKTenkiの終了
07分 閲覧用uktenki.iniのコピー

同じ時刻のイベントはどちらが先でも構わないものです。無線LANでの受信が必要なければ、無線関連は飛ばしてください。

少しでも簡略化するため、冒頭でのUKTenkki終了は省いています。UKTenkiのOKボタンにAppCloseByClass UKTenkiを(SortInchkeyなどで)割り当てておけば、UKTenkiが常に起動状態になってしまうことは回避できます。

フォルダ構成
インストーラーの付属しないソフトは?Program FIes?Toolsにまとめていますので、ちょっと普通と違うかもしれません。
まあ、この通りの環境にしてもらえれば、バッチをそのままコピーして使用できます。

?Program Files?
Tools?
execmulti.exe
execmult.ini
AppCloseByClass.exe
AppScheduler.exe
copyfile.exe
wifictrl.exe
UKTenki?
UKTenki.dll
UKTenki.exe
UKTenki.ini
UKTenki_get.ini		(起動時巡回するini)
UKTenki_view.ini	(起動時巡回しないini)

最初から環境を作成するとすると・・・

  1. UKTenkiをインストール。
  2. execmulti, AppScheduler, copyfile, wifictrl, WakeApp の実行ファイルを ?Program Files?Tools に解凍。
  3. UKTenkiを起動時巡回する設定にしてから一旦終了し、設定ファイルUKTenki.iniをコピー、同じフォルダ内で貼り付け、UKTenki_get.iniにリネーム。
  4. UKTenkiを起動時巡回しない設定にしてから一旦終了し、設定ファイルUKTenki.iniをコピー、同じフォルダ内で貼り付け、UKTenki_view.iniにリネーム。
  5. execmulti.iniを以下の通り作成。
  6. Appshedulerに起動引数 reg_once を付けて一度だけ実行。

“?Program Files?Tools?AppScheduler.exe” reg_once

という手順になります。

execmulti.ini

;;
;; UKTenki更新 05:05
;;??

[set_UKTenki_05]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,05,04,?Program Files?Tools?execmulti.exe,set_UKTenki_05
exec=?Program Files?Tools?copyfile.exe|?Program Files?UKTenki?UKTenki_get.ini,?Program Files?UKTenki?UKTenki.ini,FALSE

[unset_UKTenki_05]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,05,07,?Program Files?Tools?execmulti.exe,unset_UKTenki_05
exec=?Program Files?Tools?copyfile.exe|?Program Files?UKTenki?UKTenki_view.ini,?Program Files?UKTenki?UKTenki.ini,FALSE

[exec_UKTenki_05]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,05,05,?Program Files?Tools?execmulti.exe,exec_UKTenki_05
exec=?Program Files?UKTenki?UKTenki.exe|-Q

[close_UKTenki_05]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,05,06,?Program Files?Tools?execmulti.exe,close_UKTenki_05
exec=?Program Files?Tools?AppCloseByClass.exe|UKTenki

[on_WiFi_05]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,05,04,?Program Files?Tools?execmulti.exe,on_WiFi_05
exec=?Program Files?Tools?wifictrl.exe|on

[off_WiFi_05]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,05,06,?Program Files?Tools?execmulti.exe,off_WiFi_05
exec=?Program Files?Tools?wifictrl.exe|off

;;
;; UKTenki更新 11:05
;;

[set_UKTenki_11]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,11,04,?Program Files?Tools?execmulti.exe,set_UKTenki_11
exec=?Program Files?Tools?copyfile.exe|?Program Files?UKTenki?UKTenki_get.ini,?Program Files?UKTenki?UKTenki.ini,FALSE

[unset_UKTenki_11]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,11,07,?Program Files?Tools?execmulti.exe,unset_UKTenki_11
exec=?Program Files?Tools?copyfile.exe|?Program Files?UKTenki?UKTenki_view.ini,?Program Files?UKTenki?UKTenki.ini,FALSE

[exec_UKTenki_11]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,11,05,?Program Files?Tools?execmulti.exe,exec_UKTenki_11
exec=?Program Files?UKTenki?UKTenki.exe|-Q

[close_UKTenki_11]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,11,06,?Program Files?Tools?execmulti.exe,close_UKTenki_11
exec=?Program Files?Tools?AppCloseByClass.exe|UKTenki

[on_WiFi_11]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,11,04,?Program Files?Tools?execmulti.exe,on_WiFi_11
exec=?Program Files?Tools?wifictrl.exe|on

[off_WiFi_11]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,11,06,?Program Files?Tools?execmulti.exe,off_WiFi_11
exec=?Program Files?Tools?wifictrl.exe|off

;;
;; UKTenki更新 17:05
;;

[set_UKTenki_17]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,17,04,?Program Files?Tools?execmulti.exe,set_UKTenki_17
exec=?Program Files?Tools?copyfile.exe|?Program Files?UKTenki?UKTenki_get.ini,?Program Files?UKTenki?UKTenki.ini,FALSE

[unset_UKTenki_17]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,17,07,?Program Files?Tools?execmulti.exe,unset_UKTenki_17
exec=?Program Files?Tools?copyfile.exe|?Program Files?UKTenki?UKTenki_view.ini,?Program Files?UKTenki?UKTenki.ini,FALSE

[exec_UKTenki_17]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,17,05,?Program Files?Tools?execmulti.exe,exec_UKTenki_17
exec=?Program Files?UKTenki?UKTenki.exe|-Q

[close_UKTenki_17]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,17,06,?Program Files?Tools?execmulti.exe,close_UKTenki_17
exec=?Program Files?Tools?AppCloseByClass.exe|UKTenki

[on_WiFi_17]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,17,04,?Program Files?Tools?execmulti.exe,on_WiFi_17
exec=?Program Files?Tools?wifictrl.exe|on

[off_WiFi_17]
exec=?Program Files?Tools?AppScheduler.exe|-,-,1+,17,06,?Program Files?Tools?execmulti.exe,off_WiFi_17
exec=?Program Files?Tools?wifictrl.exe|off

;;
;; 登録用
;; 一度実行したら、このセクションは削除しても構いません
;;

[reg_once]
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,05,04,?Program Files?Tools?execmulti.exe,set_UKTenki_05
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,05,07,?Program Files?Tools?execmulti.exe,unset_UKTenki_05
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,05,05,?Program Files?Tools?execmulti.exe,exec_UKTenki_05
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,05,06,?Program Files?Tools?execmulti.exe,close_UKTenki_05
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,11,04,?Program Files?Tools?execmulti.exe,set_UKTenki_11
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,11,07,?Program Files?Tools?execmulti.exe,unset_UKTenki_11
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,11,05,?Program Files?Tools?execmulti.exe,exec_UKTenki_11
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,11,06,?Program Files?Tools?execmulti.exe,close_UKTenki_11
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,17,04,?Program Files?Tools?execmulti.exe,set_UKTenki_17
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,17,07,?Program Files?Tools?execmulti.exe,unset_UKTenki_17
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,17,05,?Program Files?Tools?execmulti.exe,exec_UKTenki_17
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,17,06,?Program Files?Tools?execmulti.exe,close_UKTenki_17
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,05,04,?Program Files?Tools?execmulti.exe,on_WiFi_05
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,05,06,?Program Files?Tools?execmulti.exe,off_WiFi_05
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,11,04,?Program Files?Tools?execmulti.exe,on_WiFi_11
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,11,06,?Program Files?Tools?execmulti.exe,off_WiFi_11
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,17,04,?Program Files?Tools?execmulti.exe,on_WiFi_17
execSync=?Program Files?Tools?AppScheduler.exe|-,-,-,17,06,?Program Files?Tools?execmulti.exe,off_WiFi_17

無線が必要ない場合は、reg_onceの最後の6行を削除してください。





3 Responses to “Advanced/W-ZERO3[es]で、UKTenkiをサスペンド中に更新する”

  1. 1
    a nomaly's Diary:

    AppScheduler

      指定した日時・周期で指定したプログラムを起動。
    システムのタイマイベントに登録後終了。非常駐。
    配布先:ssipa’s WindowsCE fre…

  2. 2
    ssipa:

    おひさしぶりです
    上のスクリプトはまだ使用されているでしょうか?

    こちらでも長い処理(2?3分)をスケジューラ登録すると
    途中でサスペンドするという事象がでました
    一定間隔でキーコードを入れてやると回避できるようです

    http://ssipa.web.fc2.com/SStop.ZIP

    ↑引数で指定した秒数、ctlキー押下、を発生させる

    スケジュール登録するexecmultiのスクリプトの先頭に
    例えば

    exec= ? SStop.exe 300 (←3分間実行)

    を追加して使用します
    暇が有れば、お試し下さい

  3. 3
    my:

    コメントありがとうございます。
    今はUKTenkiを使ってなく恐縮です。(–;

    長い動作中にサスペンドすると言うのは私の報告事例とは別件ですが、それはありえることですね。
    長い動作をさせるようなときに、使わせていただきます。ありがとうございます。

Leave a Reply



Tags

Links




Meta


TMAX.MYOPENSRC.COM