#nomenubar
*2006年度第24回ゼミ(2006年11月30日)資料 [#ifaeae3e]

CENTER:[[11月22日(ゼミ#23)>Lab/2006/1122]] << 11月30日(ゼミ#24) >> [[12月07日(ゼミ#25)>Lab/2006/1207]]
CENTER:[[研究関係Wikiトップへ戻る>Lab]]

#contents

**優先課題 [#rcd6d5d1]

-11/24
--申し込み案の検討メールにあるFeliCaのシステムの案を早急にゼミ資料にまとめる
-11/28
--%%このWikiの整理(新しい書き込みを下にする)%%
--Felicaの動作
--armadilloへの移植
--温度センサーの謎解明
--システムの改良開始
-11/29
--PICNICの仕様書を読む(どうやって温度センサーへアクセスするのか)

**11/24 [#mb1c7986]

***全国大会申し込み案 [#m848d956]

(1) 題目

FeliCaを用いたネットワーク機器制御支援システムへの認証システム

(2) 概要(300字)

''第1版''

%%当研究室において研究・開発を行ったXMLを用いたネットワーク機器制御支援システムには、ユーザー認証システムが用意されていない。そこで、FeliCaを用いて遠隔ユーザー認証を行うシステムの研究を行う。%%

''第2版''

%%ネットワークを用いて遠隔地にある任意の機器を制御できる環境を構築するネットワーク機器制御支援システムに、FeliCaによる個人認証システムを備えることにより、アクセス制御を行いセキュリティの強化を図る。具体的には、システムへのログインの認証をFelicaによって行い、またカードによりユーザを識別しアクセスできる機器を制限することが主な内容である。これにより家庭内ネットワークに存在する機器へのアクセスの安全性を守ると共に、利便性も確保できるものと考える。%%

''第3版''

ネットワークを用いて、遠隔地にある情報家電やセンサーデバイスなど任意の機器を制御できる環境を構築する「XMLを用いたネットワーク機器制御支援システム」に、FeliCaによる個人認証システムを備えることにより、アクセス制御を行いセキュリティの強化を図る。具体的には、ユーザーがシステムのUIへアクセスする際の認証をFeliCaによって行い、またカードによりユーザを識別しアクセスできる機器を制限することが主な内容である。これにより家庭内などの閉じたネットワークに存在する機器へのアクセスの安全性を守ると共に、利便性も確保できるものと考える。

(3) 著者  発表者(+関係者)+並木美太郎

久松佳之、増渕敬、並木美太郎

(4) 分野キーワード

%%FeliCa、認証システム、XML、機器制御%%

-5-4-06 ネットワーク>モーバイルコンピューティング>センサネットワーク
-5-4-08 ネットワーク>モーバイルコンピューティング>ユービキタスコンピューティング

**11/28 [#pf0786bb]

***DeviceController内Basicメソッド [#p8ab3061]

-strs[]は関数の引数を一時格納するための変数
--strs[0]:関数名
--strs[1]:引数一時格納(通常は参照しない)
--strs[2]:第1引数
--strs[3]:第2引数
-valuesはHashtable型変数(ReadDataメソッド内では「vals」)

ReadValue関数:第2引数で指定されたタグの中身をvalues(←Device.xmlの中身が格納されている)から引き出し第1引数で指定した変数へ格納

sendandreceiveはint[]なのにscrvals.get(strs[2])はObject型。なので(int[])とキャストしてやることで解決しようとしたところClassCastExceptionが発生している。

sendandreceive = Integer.parseInt(scrvals.get(strs[2]).toString());とやってもダメ(int型ではなくint[]型が求められている)

***Felicaリーダ [#med8bdbb]

Reader.exeを起動しても読みに行ってる様子がない

**11/27 [#h4d78410]

***PICNIC [#v3f323f6]

''修論42ページ付近に温度センサーに関する記述あり''

温度・湿度・照度センサ、および人感センサはパラレルポートに接続とある。この点から推測すると以下のようになる。

-RA0が湿度?RA3が湿度?
-RA2は照度
-RA5は温度(Celciusは摂氏のこと)
-RA1はずっと0のまま
-RB0は人感センサー(ランプがついているときはLow、消えているときはHigh)

温度センサーをシステムから読み取るためにAttr.xmlの記述。変更点は以下。

-<br>を<br />に(これを変更しないとxmltransが失敗する)
-PDFからのコピペ対策
--_(アンダーバー)が消えたので手動復活(計5カ所)
--スペースを全角から半角へ
-Shift_JISをUTF-8に

    <ANALOG_SENSOR>
        <Reply>
            <HTML Type="text/html; charset=UTF-8">
                温度: %0%℃ <br>
            </HTML>
            <Data Save="false" Start="0" End="1" Type="int" Label="Temperature" />
        </Reply>
        <Procedure>
            <COMMON>
                <Internal>
                    int teisuu,kekka,Result;
                    int[] pin;
                    expr henkan;
                </Internal>
            </COMMON>
            <GET_TEMP>
                <Internal>
                    ReadValue(pin,Picnic pin);
                    ReadFunc(henkan,Operator);
                    ReadValue(teisuu,Constant);
                    Send(pin,UDP);
                    Receive(Result,UDP);
                    Expr(henkan,kekka);
                    Return(kekka);
                </Internal>
            </GET_TEMP>
        </Procedure>
    </ANALOG_SENSOR>

結果↓

 Error!!!
 
 Error Info1 = No expr or order or valiable defs.
 Error Info2 = int teisuu,kekka,Result
 Debug_int = 0
 Debug_str = null
 Html_source = 温度: %0%℃ DATAfalse,0,1,int,Temperature

→DeviceController.java 311行目(元297行目)に記述あり。Basicメソッド内。Error Info2の文字列は変数Lineの中身らしい。int teisuu,kekka,ResultはAttr.xmlの中身(xsl変換済み)。1行ずつ読んでる途中で何かエラーか?

-どうやら半角スペースが含まれていたのが良くなった模様
--半角スペースが1行に1個しか含まれないとき=変数宣言と判断する糞仕様
--タブを挿入する方法がわからなかったので不要な半角スペース全削除で対応

 java.lang.ClassCastException: java.lang.String
 	ExecScript.Basic(DeviceController.java:216)

[[ClassCastException:http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ClassCastException.html]] あるオブジェクトを継承関係にないクラスにキャストしようとしたことを示すためにスローされます。

-216行目:sendandreceive = (int[])scrvals.get(strs[2]);

→Send(pin,UDP);を処理している途中で発生したものと思われる。

''※タブを挿入してやりなおしてみるべきか?''

**11/30 [#xc6264e0]

***DeviceController.java [#pbcafaf4]

Attr.xmlを以下のように変更(変更点のみ抜粋)

 int pin1;
 ReadValue(pin1,Picnic_pin);
 pin := pin1;
 Send(pin,UDP);

pinはint[]型なので、ReadValueでint型で代入したあとpinに改めて代入してやればよい。結果↓

 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
 	java.lang.String.substring(String.java:1768)
 	ExecScript.Basic(DeviceController.java:244)

***AccessServlet.java [#bf6055e1]

PICNICが未接続の場合に表示されるメッセージ。

 Error!!!
 No actual reply data found which written in Data Section. 

これはAccessServlet.javaの262行目に記述されており、ArrayIndexOutOfBoundsExceptionが発生した場合に表示される。

***FelicaSDK [#wef81313]

Felica_Tutorialを実行→rw.dllおよびfelica.dllはC:\Program Files\Common Files\Sony Shared\FeliCaLibrary以下のものを指定しないとリーダ・ライタにアクセスできなかった


**関連ページ [#f1197262]

-[[Lab]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS