8

tl;dr;

私ができる必要があるのは、シリアル コマンドをリバース エンジニアリングして、人間が読み取れる値またはバイナリ値が生のシリアル コマンドにどのようにシリアル化されているかを理解できるようにすることです。

いいえ:

if
   66 = 'A1' or '0110 1'
   6e = 'A2' or '0110 2'
   e6 = 'B1' or '1110 1'
   ee = 'B2' or '1110 2'
then
   what is A3 or B3, etc.

オープン ソースの自動化プロジェクトのラッパーに取り組んでいます。

コマンドを送信する方法がありraw、理論的には複数のコマンドをつなぎ合わせます。
いくつかのシリアル コマンドを盗聴したところ、次のように表示されます。

[init] [HouseCode | DeviceCode] [ready] [HouseCode | FunctionCode]   

04 66 06 62       // A1 ON
04 6e 06 62       // A2 ON 
04 62 06 62       // A3 ON
04 6a 06 62       // A4 ON
04 61 06 62       // A5 ON
04 69 06 62       // A6 ON
04 65 06 62       // A7 ON
04 6d 06 62       // A8 ON
04 67 06 62       // A9 ON
04 6f 06 62       // A10 ON
04 63 06 62       // A11 ON
04 6b 06 62       // A12 ON
04 60 06 62       // A13 ON
04 68 06 62       // A14 ON
04 64 06 62       // A15 ON
04 6c 06 62       // A16 ON

04 e6 06 e2       // B1 ON 
04 ee 06 e2       // B2 ON  
04 e2 06 e2       // B3 ON 
04 ea 06 e2       // B4 ON 
....
04 ec 06 e2       // B16 ON
04 66 06 63       // A1 Off
04 e6 06 e3       // B1 Off

04 66 06 61       // All A lights On (using A1 as the starting point)
04 e6 06 e1       // All B lights On (using B1 as the starting point)
04 66 06 66       // All A lights Off (using A1 as the starting point)
04 e6 06 66       // All B lights Off (using A1 as the starting point)

04 66 06 64 2a    // A1 Dim 20
04 66 06 64 2c    // A1 Dim 21
04 66 06 64 2e    // A1 Dim 22

04 66 06 65 2a    // A1 Bright 20
04 66 06 65 69    // A1 Bright 50

私ができる必要があるのは、これをリバース エンジニアリングして、シリアル呼び出しをプログラムで実行できるようにすることです。あるいは、人間が読み取れる値またはバイナリ値がどのように生のシリアル コマンドにシリアル化されているかを理解することもできます。

はい、すべてのコマンドを盗聴して各値を個別に保存できますが、これがどのように行われたか知りたいです。

これが私の現在の観察です。

  1. 通話は 2 つに分割されます。
    • 04開始され、何を探すべきかをデバイスに伝えます
    • **どのデバイスが制御されているかをシステムに伝えます [ HouseCode& DeviceCode]
    • hex55が返され、準備ができたことを知らせます
    • 06開始され、デバイスに何を期待するかを伝えます
    • **HouseCodeハウスコードとコマンド [ & FunctionCode] をシステムに伝える
      • **オプションで送信され、ディム レベルを参照する 0 ~ 100 の値です
    • 16 進数55が再度送信され、準備ができていることが通知されます
  2. 2 番目のペアは、最初の文字をアルファベット コード ( HouseCode= A、B、C など) として使用し、2 番目の文字はアドレス ( DeviceCode= 1、2、3 など) です。
    • この情報で、私の個人的な推測では...
      • 6に直接対応する必要がありますA
      • eに直接対応する必要がありますB
  3. HouseCode4 番目のペアは、2 番目のペアと同じで始まります
  4. 4 番目のペアは、FunctionCode
    • 1 = すべてオン
    • 2 = オン
    • 3 = オフ
    • 4 = 暗い
    • 5 = 明るい
    • 6 = すべてオフ
    • 等..
  5. 5 番目のペアは、明るい/暗いコマンドでのみ表示され、0 から 100 までの数値を表します

最後に、ドキュメントでは、各コマンドはバイナリ データに関連しているため、おそらくに変換することではなく、に変換することになります。A1hexbinaryhex

HouseCode       DeviceCode      Binary Value
    A               1               0110
    B               2               1110
    C               3               0010
    D               4               1010
    E               5               0001
    F               6               1001
    G               7               0101
    H               8               1101
    I               9               0111
    J               10              1111
    K               11              0011
    L               12              1011
    M               13              0000
    N               14              1000
    O               15              0100
    P               16              1100

FunctionCode                    Binary Value
All Units Off                   0000
All Lights On                   0001
On                              0010
Off                             0011
Dim                             0100
Bright                          0101
All Lights Off                  0110
Extended Code                   0111
Hail Request                    1000
Hail Acknowledge                1001
Pre-set Dim (1)                 1010
Pre-set Dim (2)                 1011
Extended Data Transfer          1100
Status On                       1101    
Status Off                      1110
Status Request                  1111

これを達成する方法を知っている人はいますか?

4

1 に答える 1

1

Heyuは、X10 デバイスで動作する素晴らしいオープン ソース アプリケーションです。彼らは、X10 の元のドキュメントに基づいた非常に包括的なX10 プロトコル仕様を公開しています。

これにより、作業から推測作業が取り除かれます。重要なのは、ハウスコードとユニットコードが静的マップであり、計算できないことです。プロトコル仕様は、ビットストリームがどのように形成されるかを正確に指定します。例えば

PC      Interface   Description
0x04,0x66           Address A1
        0x6a        Checksum ((0x04 + 0x66)&0xff)
0x00                OK for transmission.
        0x55        Interface ready.

0x86,0x64           Function: A Dim 16/22*100%
        0xea        Checksum ((0x86 + 0x64)&0xff)
0x00                OK for transmission.
        0x55        Interface ready.
于 2012-11-14T14:21:30.920 に答える