やりたいこと:
OpenECHOのElectricStormWindowクラス(通称:電動窓シャッター)に対して属性を加えたい*1。ElectricStormWindowクラスでは開閉状態(OpenCloseStatus 0xEA)がサポートされていない(仕様上も必須属性ではないので)。だから、、setupPropertyMaps()メソッドをoverrideして、属性:0xEAも扱えるようにしたい。
発生した問題:
setupPropertyMapsメソッドをoverrideして、0xEAも扱えますと追加したけど、EchonetLiteのパケットを投げると、OpenECHOからは、エラー:GET_SNAで返される。
送信パケット |10|81|0001|0EF001|026301|62(Get)|01|ea(Open Close Status)_00_| ---------------------------------------- OpenECHOからの返却パケット |10|81|0001|026301|0ef001|52(Get_SNA)|01|ea(Open Close Status)_00_|
なぜエラー:GET_SNA判断されるのか原因が分からなかった。
調査方法:
Processingではブレークができるけど、呼び出し側までトレースでもどれない。しょうがないので、サンプルソースをjava版に書き直して、Java用デバッガ、jdbで一行ずつトレースしながら、52(GET_SNA)を返却する原因を調べた。
調査結果:
EchoObjectクラスで返却パケットを組み立てる際、Propertyの正当性をチェックしている。具体的には、ElectricStormWindowクラスのisValidPropertyメソッドを呼んで、正当性を確認している。このメソッドのswith文に、0xEAを加えていなかったため、正当性チェックでfalseとなっていた。
対策:
ElectricStormWindowクラスのisValidPropertyメソッドをoverrideして0xEAの場合の正当性チェックを加える
修正内容:
~疲れたので修正内容は後日追記~
修正結果:
以下の通り、正常に応答するようになった。
送信パケット |10|81|0001|0EF001|026301|62(Get)|01|ea(Open Close Status)_00_| ---------------------------------------- OpenECHOからの返却パケット |10|81|0001|026301|0ef001|72(Get_Res)|01|ea(Open Close Status)_01_42|
■ご参考
java版のビルド
#!/bin/sh CLASS=Shutter echo "javac -g -cp OpenECHO.jar ${CLASS}.java" javac -g -cp OpenECHO.jar ${CLASS}.java
jdbの起動
#!/bin/sh CLASS=Shutter echo "jdb -classpath /<some_pass>/OpenECHO.jar: ${CLASS}" jdb -classpath /<some_pass>/OpenECHO.jar: ${CLASS}
*1:制御したい対象の電動シャッター(文化シャッターとか)は開閉状態を取得する際、0xEAを使う