ブログ/こばさんの wakwak 山歩き Twitter

2011-09-26 microSD と WebPost に対応しました

microSD と WebPost に対応!

| microSD と WebPost に対応!を含むブックマーク

 本記事には古い情報が含まれている場合があります。まとめページ を作成しましたので併せて御覧下さい。


 テント背負ってビール飲みに行ってきたような連休の過ごし方でしたけど、致命的なバグは潰れたはずぽいので、とりあえず公開いたします。


20110926版 ファームウェア一式 こちらの20110928版 をお使い下さい。



20110920版との機能比較(オリジナルと20110920版の違いはこちらを参照ください)

  • WebPost サービス(任意の Web サイトへデータを Postする機能)を追加
  • Logging サービス(ログ記録する機能)において、内蔵フラッシュディスクのほか microSD に対応
  • 起動直後のほか約24時間おきにNTPから時間取得
  • 出力できる項目が増加(UTC時刻・稼働時間・総カウント数などなど)
  • Twitter/Pachube/Logging/Webpost の各サービスについて初回の遅延起動をサポート
  • Twitter/Pachubeの内部ロジックを全面的に再構築
  • PC接続時に出力されるログの表示整形およびエラー番号の詳細表示(HTTPのレスポンスコードが見えます)

env.ini の仕様赤字は今版で追加された項目)

項目名説明省略時の挙動制限
gpsBaudGPSとの通信速度GPS未利用4800/9600等の数値
ntpServer時計合せに使用するNTPサーバーNTP未利用最大30文字
twitterTwitter設定ファイルTwitterサービス未利用最大30文字
pachubePachube設定ファイルPachubeサービス未利用最大30文字
loggingLogging設定ファイルLoggingサービス未利用最大30文字
webpostWebPost設定ファイルWebPostサービス未利用最大30文字
ipIPアドレスDHCPを利用xxx.xxx.xxx.xxx
netmaskサブネットマスクip指定時は省略不可xxx.xxx.xxx.xxx
gatewayデフォルトゲートウェイip指定時は省略不可xxx.xxx.xxx.xxx
dns参照DNSサーバーip指定時は省略不可xxx.xxx.xxx.xxx
enableMacMACアドレス利用の有無未利用0 または 1
gmtypeGM特性ファイル省略不可最大30文字
soundブザー鳴動フラグ1:放射線検知の度に鳴動0 または 1
timezone標準時刻からの誤差省略不可数値のみ
init_stabilize_time起動後に計測を待つ時間(秒数)30数値のみ
cpm_array_max移動平均の短時間分数101〜10
long_cpm_array_max移動平均の長時間分数601〜60

Twitter 設定ファイルの仕様

項目名説明制限
id もしくは IDTwitterアカウントのID最大60文字
pass もしくは PASSSuperTweetのパスワード最大60文字
formatツィート時の書式(使用できるパラメータは後述)最大140文字
intervalTwitterサービスの起動間隔(分)数値のみ
delayStartTwitterサービスの起動遅延時間(分)数値のみ

Pachube 設定ファイルの仕様

項目名説明制限
apikey もしくは PACHUBE_APIKEYPachubeのAPIKEY最大60文字
feedid もしくは PACHUBE_FEEDIDPachubeのFEEDID数値のみ
usv0直近10分間のuSV/hをFeedする場合の項目ID数値のみ(未使用時は-1)
nsv0直近10分間のnSV/hをFeedする場合の項目ID数値のみ(未使用時は-1)
cpm0直近10分間のcpmをFeedする場合の項目ID数値のみ(未使用時は-1)
usvlong0直近60分間のuSV/hをFeedする場合の項目ID数値のみ(未使用時は-1)
nsvlong0直近60分間のnSV/hをFeedする場合の項目ID数値のみ(未使用時は-1)
cpmlong0直近60分間のcpmをFeedする場合の項目ID数値のみ(未使用時は-1)
intervalPachubeサービスの起動間隔(分)数値のみ
delayStartPachubeサービスの起動遅延時間(分)数値のみ

Logging 設定ファイルの仕様

項目名説明制限
pathファイル名の書式(使用できるパラメータは後述)最大60文字
formatログ記録時の書式(使用できるパラメータは後述)最大140文字
intervalLoggingサービスの起動間隔(分)数値のみ
delayStartLoggingサービスの起動遅延時間(分)数値のみ

WebPost 設定ファイルの仕様

項目名説明制限
urlPOST 先のサイト最大250文字
intervalWebPostサービスの起動間隔(分)数値のみ
delayStartWebPostサービスの起動遅延時間(分)数値のみ

書式に使用できるパラメータ

項目名説明出力例WebPost対象
%SEQ%初回起動時からの連番00000001毎回
%DATE%日付(timezoneで補正後)2011/09/20×
%TIME%時刻(timezoneで補正後)12:24:31×
%DATETIME%日時(timezoneで補正後)2011/09/20 12:24:31毎回
%YEAR%日付の西暦年2011×
%MONTH%日付の月09×
%DAY%日付の日20×
%HOUR%時刻の時12×
%MINUTE%時刻の分24×
%SECOND%時刻の秒31×
%U_DATE%日付(UTC)2011/09/20×
%U_TIME%時刻(UTC)03:24:31×
%U_DATETIME%日時(UTC)2011/09/20 03:24:31毎回
%U_YEAR%日付の西暦年2011×
%U_MONTH%日付の月09×
%U_DAY%日付の日20×
%U_HOUR%時刻の時03×
%U_MINUTE%時刻の分24×
%U_SECOND%時刻の秒31×
%CPM%直近10分間のcpm値19毎回
%uSV%直近10分間のμSV/h値0.118毎回
%L_CPM%直近60分間のcpm値17毎回
%L_uSV%直近60分間のμSV/h値0.105毎回
%LONGITUDE%正確な経度138.728635毎回
%LATITUDE%正確な緯度35.360444毎回
%R_LONGITUDE%アバウトな経度138.73×
%R_LATITUDE%アバウトな緯度35.36×
%ALTITUDE%高度(ジオイド高)3776毎回
%SPEED%速度(km/h)180毎回
%UPTIME%稼働時間(秒)45514毎回
%F_COUNT%起動してからの累積カウント数65241毎回
%MAC%MACアドレス
(enableMac=1のとき)
0102030f0e0d毎回
%VERSION%ファームウェアのバージョン20110926初回
%GM_CARIB%ガイガー管の特性129.032初回
%GM_VOLT%ガイガー管の特性380初回
%GM_OFFSET_uSV%ガイガー管の特性-0.032初回
%GM_CARIB_CPM0%ガイガー管の特性12初回
%GM_CARIB_uSV0%ガイガー管の特性0.061初回
%GM_CARIB_CPM1%ガイガー管の特性28初回
%GM_CARIB_uSV1%ガイガー管の特性0.185初回

※WebPost対象「初回」は起動して初回1回のみ、「毎回」は interval で設定した間隔の度に、それぞれ送信


 プライバシーポリシー?として、個体を識別できる記号(MACアドレス)の送出に関しては任意で設定できるようにしました。

 若松ガイガー(というか mbed をベースにしたネットガイガー)を複数機お持ちの方には MAC アドレスによる個体識別は便利だろうと思います。


 経緯度の取り扱いに関しては悩むところですが、ハードウェア的に個体を識別するものではないという判断で WebPost する対象といたしました。

 将来のバージョンで、WebPost する情報から経緯度だけを外すオプションを作るかもしれません。


(追記)

 20110928版にて位置情報を WebPost するかどうかフラグ追加しました。

 未指定のデフォルトは「位置を送信しない」です。

 位置情報も送信する際には WebPost 設定ファイルの中で enableGPS=1 と書いて下さい。


既知の問題(今後の課題)

  • Logging サービスでディスクの残量チェックを行っていない
  • SDHC(4GB〜)には未対応(対応させる方法もあるらしいので引き続き調査)
  • SDカードが入ってない状態でSDカードに書き込みするとフリーズする (fopenの中で止まってる・・・ナンデ?)
  • Twitter/Pachube/WebPost で、それぞれ複数アカウントを使ったマルチ送信に対応したかったけどメモリー不足で挙動不審になったため取り止め



 個人的な目玉は WebPost サービスです。測定値を任意サイトへ HTTP-POST 形式で送信する仕組みです。

 自宅サーバーなどお持ちの方にとっては、超待望のサービスではないのかな、と。

 いったん自宅サーバーで受けて情報を加工して別のサービスへ転送させるなど、mbed のチープなメモリー空間に制約されない、ものすごい応用ができるはず。。


 当初、Post する内容を選ぶような構想もありましたが、中で使ってる公開 HTTPClient ライブラリの HTTPmap オブジェクトがメモリー食い過ぎ(std::string なんて気軽に多用するなよ!)で、自由に設定できるようにしても組み合わせてによってフリーズ多発になること必至(フリーズさせない組み合わせを見つけ出すのが大変)なので、予め必要と思われるもの、ことごとく固定で WebPost する設計にしました。

 不要な情報は受信側で切り捨てて下さいませ。


 「初回のみ送信」という印がありますが、全項目を一括で Post しようとするとメモリー不足で固まるので、「稼働中に変動しない項目」は最初に1回だけ Post するようにしています。


 受信側で情報をくっつけて処理してください。

 複数 mbed を同じサイトへ飛ばしている時ならば、enableMac=1 で MAC アドレスを通知にして、受信側で MAC アドレスをキーにくっつけて下さい。


 試せる Web サイトがないって方は、以下の評価(お試し)サイトをご利用下さい。

 私の友人が作成されたサイトですが、出来が未だ中途半端ぽいので実証実験する程度の利用に留めるのが吉だと思います。(ガイガーの数値には依存してなくて温度や湿度など数値ものならば、何を Post しても大丈夫らしいです)

1.http://www.logoole.etr.jp/entry/ から APIKEY を取得

2.WriteKey と ReadKey を記録

 仮に

WriteKey6D46_qUKnEqOGCsfXYRz2g
ReadKeyrjaIIrzXLUig09rNfnxCrA

が画面に表示されたとして話を進めます。

3.WEBPOST.CFG の URL=http://api.logoole.etr.jp/6D46_qUKnEqOGCsfXYRz2g.post とする。

4.env.ini で #webpost のコメント # を外す

5.若松ガイガーを再起動(設定ファイルを読み込ませる)

6.しばらく放置(どれくらい放置すべきかは delayStart や interval の設定値による)

7.別パソコンで Post されたログを見る

表形式で見るhttp://api.logoole.etr.jp/rjaIIrzXLUig09rNfnxCrA/datatable.html
グラフで見るhttp://api.logoole.etr.jp/rjaIIrzXLUig09rNfnxCrA/L_uSV.png

※L_uSV.png → L_CPM.png にすると CPM なグラフが出る

 なんかショボすぎますが、いちお連休3日間の成果だそうです。

 「まだPachubeを超えてねぇぞ」って伝えてあります。

 今後のバージョンアップに期待しましょう。




 いきなり microSD 対応ったって、あの表面実装スロット は使いづらいように思います。

 私の場合、外箱のネジは常に外した状態で、100均のマジックテープバンドで蓋を止めてますので、使いやすい別の場所に microSD スロットを付けることにします。


http://dl.ftrans.etr.jp/?7212871ce30c40b5b09fa35415893c6527a712f9.png


 microSD スロットは スイッチサイエンスの でも マルツの でも、それ以外でも好きなものをお使い下さい。


http://dl.ftrans.etr.jp/?858d9e7751d449e2b2866d8956d357017c264be2.jpg http://dl.ftrans.etr.jp/?48c846400e1c4909a47d5372da6b30977f34ff36.jpg


 ほとんどヤケクソな取り付け位置ですが(笑)

 GM管のアノード側は 400V 近い高電圧が来てますので、絶縁だけはくれぐれも厳重に。速攻でパーツを破壊します。

(液晶の上の余地も基板上は高圧生成回路ですから、厳重な絶縁必須です)


 あれ、右のは?


 プログラムを作るとき用の mbed マシンを新しく調達しました!

 mbed本体(5200円)オレンジボード完成品(3900円)リチウム電池ホルダー(50円)です。

 オレンジボード基板のみ(1400円) でも良かったのですけど、LANコネクタとか小物を秋月に注文すると大して変わらない値段になってしまうので・・・

 GM管は繋がってないので cpm 数は増えないですけど、とりあえずデバッグには十分つかえます。


 17番ピンの負論理パルス (←訂正、オシロで見たら正論理でした) をカウントしているだけなので、ここに別の管を繋げば簡単にガイガーカウンターに出来そうです。

 信号取り出しまで出来た自作ガイガーカウンター があるので、ソフト作りが一段落したら、17番ピンに繋いでネットガイガーに仕立てようと思います。 


 ということで、新しい mbed を買って早速 GT-723F を繋いで分かったことが。

 捕捉の邪魔をするノイズ源は mbed 本体でした!(高圧生成部かもしれないが)

 CPU は 96MHz と、一昔前のパソコン並の速度ですから、それなりに盛大にノイズも出すのでしょう。


 何とかシールドしたいところです。。


追記(2011/09/28)

 バグ修正および軽微な機能追加した20110928版を公開しました。


追記(2011/10/25)

 オレンジボードのmbedの17番ピンに自作ガイガー管を繋いだ「互換機」を作ってみました。

カメコカメコ 2011/09/27 12:33 お帰りなさい&お疲れ様です。
とりあえず、このファームの前の状態で6台とオリジナルのファームで1台を運証している状況をウェブにまとめました。なぜか逗子と藤沢が絶好調ですが、他は似たり寄ったりでよく止まったりします。
シリアルを見ていると、twitterでエラー7という奴が出た以外は、だいたい同じような感じでポスト出来ず止まって居ます。あたらしいファームに入れ替えてチェックしてみますね。
こばさんのファームのせいではなく、どうも出荷時に金属管が片方によっているまま通電したり、箱を閉めたときにledの足が管に触れてしまっていたりしたものを怪しんでいるのでいます。うち1台はどうもmbedが壊れました。2台ほどmbedを手配して、不調のものと入れ替えて見たいと思います。
要望で上げたかった遅延起動は入れていただいたので、もし可能ならば遠隔でリセットする、あるいは更新出来ない状態が続いたらリセットする等検討いただけたら幸いです。よろしくお願いします。

こばさんこばさん 2011/09/27 12:58 全部で7台ですか!うーん参りました!!(笑)

電池ホルダーGPSとか余計なものが繋げてなければ、比較的故障度は低い構造な気はしますけど、いったい何でしょう・・・単独でPCと繋いでも、あの眩しい青色LEDが光らないのでしょうか?
私はD10のLEDを付け間違えて、足が短いまま(基板スレスレ)で使ってるので、ショートの心配はないです(笑)
それでもチカチカは普通に見えるので、短足LED仕様の方が安全かもしれませんね。

「よく止まる」ですけど、時計も停止した状態なのか、Twitter/Pachube の送信にコケつつ時計は動いている状態なのか、それによって考えられる原因が違います。

前者の場合は、メモリー枯渇によるフリーズもしくはプログラムバグが疑われますが、後者の場合は外のサーバー側に問題があると思われます。

あと、今日になって気がついたこと、イーサネットコンバータなどの無線系で引き回した先で使ったときによく起きますが、何かの調子でネットワークが切断されたとき(ガイガーとイーサネットコンバータとの間でリンク状態は維持しているが送信パケットが相手に届かないとき)、が長時間続いたときに送信の一切が止まってしまいました。
時計は動いているのでフリーズじゃないんですけど・・・

ちょぅどパソコンない環境で単独動作させてたときだったので、詳しいログが追えず・・・
(計測ログじゃなくて動作ログをフラッシュメモリーに落とす機能が欲しくなった)

新しいファームではエラー番号を勝手に遮蔽せずに、ありのままログ出力するようにしましたので、なんとかエラー番号をゲットして下さい。

(こんなこと書くと失礼ですが)オリジナル版のプログラムは、あちこちからライブラリをコピペして作ってある風な感じで、お世辞にも美しいとは言えない作り(何とか動かしてる感が強い)だったのですが、今回のバージョンで、Twitter/Pachube/WebPost 全てを共通ライブラリに集約して、かなーりすっきりした構造にしました。
すっきりさせた分で余ったメモリーに余計な機能を盛り込んで・・・ってやってるので、カツカツ状態で動いているのはオリジナルと大差ありませんけど(笑)

あと気になる点は DHCP のリース期限に伴う再リースの処理が正しく出来ているのか?って点
ここら辺はオリジナルと一緒で公開ライブラリを流用しているのですが、最初に接続処理したらその後は、なにもDHCPサーバーとお喋りしてないんですよ。ライブラリの中で勝手にやってくれているのかどうか・・・
(RS232C→LANな仕事をしてくれる WIZ110SR というやつも持ってるんですが DHCP 下で使うと数時間〜数日で必ずフリーズするという酷さ・・)

もし試せたら、DHCP からアドレス貰うのをやめて固定IPで試して下さると嬉しいです。

カメコカメコ 2011/09/27 17:53 まずフリーズの件ですが、PACHUBEやツイッターにデータ送信をミスっても、MARK2自体は問題無く動いています。
(動いているように見える)
時計はきちんと動いていますし、シリアルを接続してもにがリングすると、きちんとデータを送ってきます。
そしてデータ中には「送信ミスったよ」と表示されるわけです。
完全にデータ送信が出来なくなること(PACHUBEのデータ上点線のままになって、かつツイッターは更新
されないまま)になる事は1日に1台か2台ぐらいで、他は断続的に更新されたり、あるいは思い出したように
ツイッターを投稿したりしています。

次にDHCPですが、一個前のこばさんのファームでも、新しいファームでもipの頭の#を取って、固定IPを
指定すると、まずntpへの時間あわせが出来ず、かつ起動した後の時計も1970年になり、そして
pachubeもツイッターも更新されません。(シリアルを見ると失敗している。失敗する雰囲気的には
上記の状態と一緒。)
ちなみにこの状態でPCからpingを打ってみたのですが、pingはmark2が固定IPでもDCHPでのIP取得でも
どっちでも帰ってきませんでした。
あと固定IPはちゃんと設定できているの?というところですが、うちでは192.168.1.1を使っていて
2から頭64をDHCPにして、以降の固定をファイルサーバーなどに使っているので、たぶん設定を
間違えているという事は無いと思います。

で、ゲットするログは新しいファームを入れて、フリーズ癖のある奴をシリアル監視でいいですかね。
その固定IPの件は私も気になっている所なので、固定IPでのチェックをしたかったのですが、現状
上記のような感じなので、固定IP出来ずにおります。どうしましょ。

こばさんこばさん 2011/09/27 20:49 時計がきちんと動いているようであれば相手サーバーに蹴られていることになりますねー

固定IP、ずっと前に軽く試しただけで、もっぱら DHCP でテストしてたんで、ちょっと盲点でした。
1970年になるってことはバッテリーなしの環境ですよね?

その他にもバグを見つけてしまったので、今日明日のうちに修正版を出そうと思います。

カメコカメコ 2011/09/27 21:17 はい。バッテリなしのオリジナルのままです。
スペアの7番を改造してGPS付きにしようとしたのですがまだできていません(泣)

修正版をお待ちして固定IPチェックします。

ハード的におかしな点がないかだけちょぼちょぼとチェックしております。

こばさんこばさん 2011/09/28 02:08 固定IP、バグってました!
完全にノーマークでした、すみません。

ノイズで感度低下してた GT-723F ですけど、向きを反対(コネクタのある場所を上)にしただけで、(少なくとも今日は)かなり好調になりました。もう少し様子見してから結論を出しますけど、、

今晩放置させて明日の朝まで問題なければ、20110928版として公開しようと思います。
もうちょっとお待ち下さいませ。

hamuhamu 2011/09/29 13:26 お世話になります。
早速新ファーム使用しています。
SDへのログ記録ができたのでそのデータを
GoogleMapsに落としこむことができればと考えてます。
ログをkmlファイルへ変換、もしくは出力するのに
いい方法がないか考えてます。いいアイディアあればお願いします。

こばさんこばさん 2011/09/30 10:28 こんにちは。

私の友人サイトが、KMLファイルコンバータを作ってます。
http://www.geiger.etr.jp/upload.aspx で各種ログをKMLに変換してくれるのですが、まだ若松ガイガー(こば版)の形式には対応してくれてません。

もともとは、線量ログとGPSログが別々に収集されたファイルを時間に合わせて結合する仕組み(GPSなしのデジカメで撮影した写真に位置タグを追記するとの一緒の原理)になってるらしいです。
線量を秒単位に微分して位置情報と上手に突合させたりと、なんか難しいことやってるつもりらしいですが、2ヶ月間の利用者は一桁だそうで(笑)

サンプルログは既に渡してあるので、仕事の合間で対応してくれるはず・・・
「出来たよ」って連絡が来たら、またここでも報告いたします。

hamuhamu 2011/09/30 18:23 おおぉぉぉ!
それは楽しみ〜〜
ありがとうございます。待ちます!