Bobaos-Raspberry Piを使用したKNX TP / UARTバスアクセス

自動化システムとKNX標準に精通していない場合は、Googleまたは公式サイトから必要な情報を入手できます。 この標準を使用すると、多くのことが明らかになります。おそらく、私と同じように、IPルーターを経由せずにKNX物理バスにアクセスする方法の問題に長い間興味を持っています。


次に、WeinzierlのRaspberry PiとKNX BAOS 838 kBerryモジュールを使用して、この問題を自分で解決した方法を示します。



やる気


KNX標準は、中央のPLCコントローラーがなくても機能する分散システムです。 分散化は信頼性を提供しますが、システムにPLCがないため、必要な柔軟性が失われます。 さまざまなIPゲートウェイを使用し、サーバーからUPD経由で通信できますが、バスへの直接アクセスの方が信頼性が高いため、このソリューションは検討しませんでした。


既存のソリューション


市場では、この問題の解決策を見つけることができますが、そのうちの次のものと密接に連携しました。


Loxoneミニサーバー



UMC用のiRidiumサーバー



EVIKA LogicMachine



いくつかのソリューションは優れていますが、価格は反発的です。さらに、プログラミングの柔軟性を高めたいと思います。


解決策


この問題は、Raspberry PiとWeinzierl KNX BAOS Module 838 kBerryを使用して解決されました。
モジュールのコストは約70ユーロで、合計でRaspberry Pi +電源を使用すると、DINレールのハウジングは約150ユーロになります。


ランタイムとして、nodejsが使用されます。依存関係のUARTと通信するための「シリアルポート」モジュール。


通信プロトコルの簡単な説明

このアプリケーションは、シリアルポートを介してBAOS 838モジュールに接続され、ObjectServerプロトコルを介して通信します。ObjectServerプロトコルの説明については、記事の最後にあるリンクを参照してください。


データフレームは、FT1.2プロトコルで次のとおりです。


|0x68|L|L|0x68|CR|data|C|0x16|  L -   data +1    CR -  ,  0x73  , 0x53   , C -  = (   +  ) mod 256 

リセット要求、リセット表示、確認応答フレームなど、一定の長さのフレームもあります。


接続が開かれるとリセット要求が送信され、モジュールがリセットされるとリセット指示がbaos 838モジュールからRaspberry Piに送信され、データを受信すると確認応答が各側から送信されます。


データデータは次のフィールドで構成されます。


 |  |  |  | MainService | 1 |  .  0xF0 | SubService | 1 | .   : , , . | StartItem | 2 | ID   | NumberOfItems | 2 |    ...      .       . 

通信スキーム:


  1. アプリケーション(クライアント)がリセット要求を送信します。
  2. BAOS 838(サーバー)は確認応答を送信します。
  3. クライアントは最初の要求(たとえば、GetDatapointDescription.Req)を送信します。 奇数フレーム。
  4. サーバーはリクエストを受信し、確認応答を送信します。
  5. サーバーは、要求に対する応答を送信します。
  6. クライアントは確認応答を送信します。
    ....

接続


モジュールは、Raspberry PiボードのGPIOピンに接続されています。詳細については、記事の最後にあるリンクを参照してください。


Ets


KNXデバイスと同様に、BAOS 838モジュールはETSを介して構成されます。 この場合のアプリケーションは「KNX BAOS 830」を使用しており、メーカーの公式ウェブサイトからダウンロードできます。 デバイスは、最大1000個のマルチキャストアドレスをサポートします。


Raspberry Piを構成する


まず、raspbian-stretch-liteをインストールし、sshアクセスを構成します。


次に、UARTインターフェイスを構成します。 Raspberry Pi 3の場合:


 sudo sh -c "echo dtoverlay=pi3-miniuart-bt >>/boot/config.txt" 

/boot/cmdline.txtからエントリconsole = serial0,115200を削除します


ユーザーをダイヤルアウトグループに追加します。


 sudo usermod -a -G dialout YOURUSERNAME 

再起動


 reboot 

nodejs、gitをインストールします。


 curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs git 

準備が完了したら、プロジェクトに移ります。


ボバオクリ


テストのために、コマンドラインにシンプルなインターフェースを使用できます。 インストール:


 sudo npm install -g bobaos-cli 

以下を開始します。


 % bobaos-cli bobaos> help Commands: help [command...] Provides help for a given command. exit Exits application. open [options] Open serial port getDatapointDescription [options] GetDatapointDescription.Req service setDatapointValue [options] SetDatapointValue.Req service with command "set and send to bus" readDatapointFromBus [options] SetDatapointValue.Req service with command "read via bus" getDatapointValue [options] GetDatapointValue.Req service getParameterByte [options] GetParameterByte.Req service 

次に、openコマンドでポートを開きます。 デフォルトでは、デバイス/ dev / ttyAMA0との接続が開かれます。システムに異なるインターフェースがある場合は、-p、--portオプションを使用します。


さらに、構成されたデータポイントに関する情報を取得できます。


 bobaos> getDatapointDescription -s 1 -n 10 { service: 'GetDatapointDescription.Res', direction: 'response', error: false, start: 1, number: 10, payload: [ { id: 1, valueType: 8, configFlags: 95, dpt: 'dpt9' }, { id: 2, valueType: 7, configFlags: 87, dpt: 'dpt5' }, { id: 3, valueType: 7, configFlags: 87, dpt: 'dpt5' }, { id: 4, valueType: 7, configFlags: 87, dpt: 'dpt5' }, { id: 5, valueType: 7, configFlags: 87, dpt: 'dpt5' }, { id: 6, valueType: 0, configFlags: 95, dpt: 'dpt1' }, { id: 7, valueType: 0, configFlags: 95, dpt: 'dpt1' }, { id: 8, valueType: 0, configFlags: 87, dpt: 'dpt1' }, { id: 9, valueType: 0, configFlags: 87, dpt: 'dpt1' }, { id: 10, valueType: 14, configFlags: 87, dpt: 'dpt16' } ] } bobaos> 

私の場合、最初のものは温度センサーであり、次にいくつかのシングルバイト値、いくつかのシングルビット値、およびdpt16文字列値です。


値を取得します。


 bobaos> getDatapointValue -s 1 -n 10 { service: 'GetDatapointValue.Res', direction: 'response', error: false, start: 1, number: 10, payload: [ { id: 1, state: 16, length: 2, value: <Buffer 0c bf> }, { id: 2, state: 0, length: 1, value: <Buffer 00> }, { id: 3, state: 0, length: 1, value: <Buffer 00> }, { id: 4, state: 0, length: 1, value: <Buffer 00> }, { id: 5, state: 0, length: 1, value: <Buffer 00> }, { id: 6, state: 0, length: 1, value: <Buffer 00> }, { id: 7, state: 0, length: 1, value: <Buffer 00> }, { id: 8, state: 0, length: 1, value: <Buffer 00> }, { id: 9, state: 0, length: 1, value: <Buffer 00> }, { id: 10, state: 0, length: 14, value: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00> } ] } bobaos> 

値は未変換の形式で返されます;変換には、dpt1からdpt18までの型をサポートするknx-dpts-baosライブラリを使用できます。


値を設定します。


 bobaos> setDatapointValue -s 2 -v 128 -t dpt5 { service: 'SetDatapointValue.Res', direction: 'response', error: false, start: 2, number: 0, payload: null } bobaos> getDatapointValue -s 2 { service: 'GetDatapointValue.Res', direction: 'response', error: false, start: 2, number: 1, payload: [ { id: 2, state: 16, length: 1, value: <Buffer 80> } ] } bobaos> 

bobaos-cliを使用すると、バスからデータをすばやくテスト、インストール、読み取りできます。


アプリケーションの使用


npmパッケージをインストールします。


 npm install --save bobaos 

スクリプトに追加します。


  const Baos = require('bobaos'); const app = new Baos({serialPort: {device: '/dev/ttyAMA0'}, debug: false}); // send requests after successful initial reset app.on('open', () => { app .getDatapointDescription(1, 10) .getParameterByte(1, 10) .readDatapointFromBus(1, 2) // good .readDatapointFromBus(1, 10) // error! .getDatapointValue(1, 10) .setDatapointValue(2, Buffer.alloc(1, 0xc0)) .getDatapointValue(2); }); // listen to incoming events and responses app.on('service', console.log); 

出力は次のようになります。


 { service: 'GetParameterByte.Res', error: false, start: 1, number: 10, payload: <Buffer 01 03 05 07 09 0b 0a 00 00 00> } { service: 'SetDatapointValue.Res', error: false, start: 1, number: 0, payload: null } { service: 'GetDatapointValue.Res', error: false, start: 1, number: 1, payload: [ { id: 1, state: 4, length: 2, value: <Buffer 0c fb> } ] } .... .... 

これで、自由に実験し、スクリプトを作成し、nodejs、npmパッケージの機能を使用する権利があります。 まだまだ多くの作業がありますが、順調なスタートが切れており、これを継続して喜んで動機付けています。


参照資料


  1. Githubリポジトリ
  2. KNX BAOSモジュール838 kBerry 。 リンクを使用して、情報を確認し、ETSのアプリケーションをダウンロードします。
  3. プロトコルの説明
  4. Raspberry Piの公式インストールドキュメント


Source: https://habr.com/ru/post/J346680/


All Articles