LoginSignup
3
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-09-25

ダイビングツールの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◯裏番組シェル芸勉強会

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4