ダイビングコンピュータからデータを取り出してみた備忘録

  • 1
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

ダイビングツールの1つに「ダイビングコンピュータ」というものがあるのだが、コレかなり高性能で面白い。
ダイビング中の潜水深度を表示してくれるだけでなく、減圧停止時間を知らせてくれたり、過去のダイビングを記録してくれていたりする。
そして、ダイビングコンピュータ(以下ダイコン)のデータをPCに落とせるらしいので、今回挑戦してみた。
ダイコンの機種はSUUNTO D4I NOVO LIMEで、PCはMacです。

SUUNTO DM5のインストール

以下のページからSUUNTO DM5をインストールします。
http://www.suunto.com/ja-jp/support/suunto-dm5
使うには、以下のものも必要みたいです。
Mono
FTDI USB Serial Driver

USB端子で端末を差し込む

USB接続するだけなのだが、不器用な私は差し込むのに苦労した
というのも、防水性は勿論のこと、水深100mくらいまで耐えうる設計みたいなので、あまり普段は見ない端子です。
IMG_20160925_111411.jpg
全然、固定されない…と四苦八苦していたが、赤ポチマークを上にして差し込んで少し左に回すと固定された。
IMG_20160925_111430.jpg

起動して日本語設定

「起動してもダイコンを認識しない!!」と思ったが、再起動したら動いた。
日本語設定は、File→Setting→General→Select languageで日本語を選択すればいけます。
こんなカンジに表示されました。
スクリーンショット 2016-09-25 12.07.26.png

データをエクスポートする

ファイル→エクスポートでいけます。
形式はXML・PDF・SDE・SMLなどでエクスポートできます。
私はSMLが気に入りました。
温度はケルビンなんですねー。

sample.sml
<?xml version="1.0" encoding="utf-8"?>
<sml SdkVersion="2.6.6" Modified="2012-09-22T10:39:51" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.suunto.com/schemas/sml">
    <DeviceLog>
        <Header>
            <Battery>3</Battery>
            <DateTime>2015-09-21T11:12:26</DateTime>
            <Duration>1883</Duration>
            <Depth>
                <Max>22.26</Max>
                <Avg>15.23</Avg>
            </Depth>
            <Diving>
                <DiveMode>Air</DiveMode>
                <Conservatism>0</Conservatism>
                <Altitude>0</Altitude>
                <SurfaceTime>0</SurfaceTime>
                <NumberInSeries>1</NumberInSeries>
                <SurfacePressure>101500</SurfacePressure>
                <Algorithm>Suunto Technical RGBM</Algorithm>
                <Gases>
                    <Gas>
                        <State>Air</State>
                        <Oxygen>0.210</Oxygen>
                    </Gas>
                </Gases>
                <StartTissue>
                    <CNS>0</CNS>
                    <OTU>0</OTU>
                    <Nitrogen>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                        <Pressure>79000</Pressure>
                    </Nitrogen>
                    <RgbmNitrogen>1</RgbmNitrogen>
                </StartTissue>
                <EndTissue>
                    <CNS>0.034375</CNS>
                    <OTU>7.51171875</OTU>
                    <OLF>0.034375</OLF>
                    <Nitrogen>
                        <Pressure>181300</Pressure>
                        <Pressure>189900</Pressure>
                        <Pressure>181400</Pressure>
                        <Pressure>157200</Pressure>
                        <Pressure>128900</Pressure>
                        <Pressure>107500</Pressure>
                        <Pressure>98800</Pressure>
                        <Pressure>89400</Pressure>
                        <Pressure>84300</Pressure>
                    </Nitrogen>
                    <RgbmNitrogen>1</RgbmNitrogen>
                </EndTissue>
            </Diving>
            <SampleInterval>20</SampleInterval>
        </Header>
        <Device>
            <Name>Suunto D4i</Name>
            <SerialNumber>11111111</SerialNumber>
            <Info>
                <SW>1.0.0</SW>
                <HW>0.0.0</HW>
                <BSL>0.0.0</BSL>
            </Info>
        </Device>
        <Samples>
            <Sample>
                <Time>0</Time>
                <Events>
                    <State>
                        <Type>Below Surface</Type>
                        <Active>true</Active>
                    </State>
                    <State>
                        <Type>Wet Outside</Type>
                        <Active>true</Active>
                    </State>
                    <State>
                        <Type>Below Wet Activation Depth</Type>
                        <Active>true</Active>
                    </State>
                </Events>
            </Sample>
            <Sample>
                <Time>0</Time>
                <Depth>1.49</Depth>
                <Temperature>302.15</Temperature>
                <Events>
                    <State>
                        <Type>Dive Active</Type>
                        <Active>true</Active>
                    </State>
                </Events>
            </Sample>
            <Sample>
                <Time>20</Time>
                <Depth>3.75</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>40</Time>
                <Depth>5.51</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>60</Time>
                <Depth>8.289999999999999</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>80</Time>
                <Depth>9.9</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>100</Time>
                <Depth>9.119999999999999</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>120</Time>
                <Depth>10.33</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>140</Time>
                <Depth>12.34</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>160</Time>
                <Depth>13.96</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>180</Time>
                <Depth>14.28</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            <Sample>
                <Time>200</Time>
                <Depth>15.75</Depth>
                <Temperature>302.15</Temperature>
            </Sample>
            ・・・・・・・・・・・・・・・・・・・・
            <Sample>
                <Time>1940</Time>
                <Depth>1.19</Depth>
                <Temperature>302.15</Temperature>
                <Events>
                    <Alarm>
                        <Type>Mandatory Safety Stop Broken</Type>
                        <Active>false</Active>
                    </Alarm>
                    <Notify>
                        <Type>Tissue Level</Type>
                    </Notify>
                    <State>
                        <Type>Below Surface</Type>
                        <Active>false</Active>
                    </State>
                </Events>
            </Sample>
        </Samples>
    </DeviceLog>
</sml>

(余談)取り出してみたファイルでシェル芸に挑戦した

DM5で見やすく表示されるので特に実行する必要もないのだが、せっかく取り出せたので、シェル芸に挑戦した。
芸人さんには程遠すぎる腕だが、このデータなら出来るかもと挑戦。何事も挑戦。

水温が摂氏20度以上の水深の平均を求める

cat sample.sml | grep -E -e "<Depth\>.*</Depth\>|<Temperature>.*</Temperature>" | tr -d "\t" | perl -pe "s/<\/.*>//g" | tr -d "\n" | perl -pe "s/<Depth>/\n/g" | perl -pe "s/<Temperature>/\t/g" | awk '{if($2>293){a=a+$1;k=k+1}}END{print a/k;}'

 潜った時の深度をグラフっぽく表示

cat sample.sml | grep -E  \<Depth\>.*\</Depth\>  | perl -pe 's/<.{0,1}Depth>//g' | awk '{a=int($1+0.5);for(i=1;i<=a;i++){printf "*"};print "";}' 

絶対もっとスマートに出来るハズなのに。。。。。
難しい。。。。

参考にした資料:【問題と解答】第24回◯◯o◯裏番組シェル芸勉強会