デバイスと接続する¶
IoTドライバを使用すると、OdooモジュールはIoTボックスに接続されたあらゆるデバイスとリアルタイムで通信できます。 IoT Boxとの通信は両方の方法で行われるため、Odooクライアントはサポートされているどのデバイスからでもコマンドを送信して情報を受信することができます。
デバイスのサポートを追加するには、以下が必要です:
特定の種類の接続されたデバイスを検出する
Interface
。個々のデバイスと通信するための
各ブートで、IoTボックスは、接続されたOdooインスタンス上に配置できるインターフェースとドライバのすべてをロードします。 各モジュールには、IoT Boxにコピーされる iot_handlers
ディレクトリを含めることができます。このディレクトリの構造は次のとおりです。
your_module
├── ...
└── iot_handlers
├── drivers
│ ├── DriverName.py
│ └── ...
│
└── interfaces
├── InterfaceName.py
└── ...
デバイスを検出¶
IoT Boxに接続されているデバイスは、Interface
を介して検出されます。サポートされている接続タイプ(USB、Bluetooth、ビデオ、プリンタ、シリアルなど)ごとにインターフェイスがあります。 をクリックします。インターフェイスは検出されたデバイスのリストを維持し、正しいドライバーと関連付けます。
サポートされているデバイスは、IPアドレスを介して接続されたOdooインスタンスのIoTモジュールにアクセスできるIoTボックスホームページの両方に表示されます。
インターフェイス¶
インターフェイスの役割は、特定の接続タイプを介して接続されたデバイスのリストを維持することです。新しいインターフェイスを作成するには、必要があります。
Interface
クラスを拡張`connection_type`クラス属性の設定
get_devices
メソッドを実装し、検出された各デバイスに関するデータを含む辞書を返します。 このデータは、ドライバのコンストラクタとsupported
メソッドの引数として与えられます。
注釈
_loop_delay
属性を設定すると、 get_devices
の呼び出し間隔が変更されます。デフォルトでは、この間隔は 3 秒に設定されています。
from odoo.addons.hw_drivers.interface import Interface
class InterfaceName(Interface):
connection_type = 'ConnectionType'
def get_devices(self):
return {
'device_identifier_1': {...},
...
}
運転手¶
インターフェイスが検出されたデバイスのリストを取得したら。 同じ`connection_type`属性を持つすべてのドライバをループさせ、それぞれの`supported`メソッドをすべての検出デバイスでテストします。 Driverのサポートされているメソッドが`True`を返す場合、対応するデバイス用にこのドライバのインスタンスが作成されます。
注釈
ドライバーの supported
メソッドは優先順位を与えられます。 子クラスの supported
メソッドは、常に親クラスのいずれかの前にテストされます。 この優先度は、ドライバーの priority
属性を変更することで調整できます。
新しいドライバを作成するには以下が必要です:
「ドライバー」を拡張
connection_type
クラス属性を設定します。device_type
、device_connection
、`device_name`属性を設定します。`supported`メソッドの定義
from odoo.addons.hw_drivers.driver import Driver
class DriverName(Driver):
connection_type = 'ConnectionType'
def __init__(self, identifier, device):
super(NewDriver, self).__init__(identifier, device)
self.device_type = 'DeviceType'
self.device_connection = 'DeviceConnection'
self.device_name = 'DeviceName'
@classmethod
def supported(cls, device):
...
デバイスと通信する¶
新しいデバイスが検出されてIoTモジュールに表示されたら、次のステップはそれと通信することです。 ボックスにはローカルIPアドレスしかないため、同じローカルネットワークからしかアクセスできません。 そのため、JavaScriptではブラウザ側で通信を行う必要があります。
プロセスは、通信の方向に依存します: - ブラウザからボックスへ Actions - ボックスからブラウザーまで、Longpolling
どちらのチャンネルも同じ JS オブジェクトである DeviceProxy
からアクセスします。これは、IoT Box の IP とデバイス識別子を使用してインスタンス化されます。
var DeviceProxy = require('iot.DeviceProxy');
var iot_device = new DeviceProxy({
iot_ip: iot_ip,
identifier: device_identifier
});
アクション¶
アクションは、写真の撮影、レシートの印刷など、特定のアクションを実行するように選択されたデバイスに伝えるために使用されます。
注釈
リクエストステータスのみ、このルートのボックスから「応答」は送信されないことに注意してください。 アクションに対する答えがある場合は、長いポーリングを介して取得する必要があります。
DeviceProxy オブジェクトでアクションを実行できます。
iot_device.action(data);
ドライバでは、Odoo モジュールから呼び出されたときに実行される action
メソッドを定義します。 呼び出し中に与えられたデータを引数に取ります。
def action(self, data):
...
ロングポーリング¶
Odoo のいずれかのモジュールが特定のデバイスからデータを読み取りたい場合。 これは、ボックスのIP/ドメインとデバイス識別子によって識別されたリスナーを作成し、デバイスのステータスが変更されるたびにコールバック関数を渡します。 コールバックは新しいデータを引数として呼び出されます。
iot_device.add_listener(this._onValueChange.bind(this));
_onValueChange: function (result) {
...
}
ドライバーでは、event_manager
から device_changed
関数を呼び出すことでイベントがリリースされます。 リスナーに設定されたすべてのコールバックは、引数として self.data
で呼び出されます。
from odoo.addons.hw_drivers.event_manager import event_manager
class DriverName(Driver):
connection_type = 'ConnectionType'
def methodName(self):
self.data = {
'value': 0.5,
...
}
event_manager.device_changed(self)