Csatlakozás egy eszközhöz¶
Az IoT illesztőprogramok lehetővé teszik bármely Odoo modul számára, hogy valós időben kommunikáljon bármely, az IoT Boxhoz csatlakoztatott eszközzel. Az IoT Boxszal való kommunikáció kétirányú, így az Odoo kliens parancsokat küldhet és információkat fogadhat bármely támogatott eszköztől.
Egy eszköz támogatásának hozzáadásához mindössze a következőkre van szükség:
egy
Interface, amely érzékeli a csatlakoztatott eszközöket egy adott típusbólegy
Driver, amely kommunikál egy egyedi eszközzel
Minden indításkor az IoT Box betölti az összes Interfacet és Drivert, amely megtalálható a csatlakoztatott Odoo példányon. Minden modul tartalmazhat egy iot_handlers könyvtárat, amelyet az IoT Boxra másolnak. Ennek a könyvtárnak a szerkezete a következő
your_module
├── ...
└── iot_handlers
├── drivers
│ ├── DriverName.py
│ └── ...
│
└── interfaces
├── InterfaceName.py
└── ...
Eszközök érzékelése¶
Az IoT Boxhoz csatlakoztatott eszközöket Interface-eken keresztül érzékelik. Minden támogatott csatlakozási típushoz (USB, Bluetooth, Video, Nyomtatók, Soros, stb.) van egy Interface. Az interface fenntart egy listát az érzékelt eszközökről, és társítja őket a megfelelő Driverrel.
A támogatott eszközök megjelennek mind az IoT Box Kezdőlapján, amelyet az IP címén keresztül érhet el, mind a csatlakoztatott Odoo példány IoT moduljában.
Felület¶
A Felület szerepe az, hogy fenntartson egy listát a meghatározott kapcsolattípuson keresztül csatlakoztatott eszközökről. Egy új felület létrehozása megköveteli
Az
Interfaceosztály kiterjesztéseA
connection_typeosztályattribútum beállításaA
get_devicesmetódus implementálása, amelynek egy szótárt kell visszaadnia, amely az észlelt eszközökről tartalmaz adatokat. Ezeket az adatokat argumentumként adjuk át a Vezérlők konstruktorainak éssupportedmetódusának.
Megjegyzés
A _loop_delay attribútum beállítása módosítja a get_devices hívások közötti intervallumot. Alapértelmezés szerint ez az intervallum 3 másodpercre van állítva.
from odoo.addons.hw_drivers.interface import Interface
class InterfaceName(Interface):
connection_type = 'ConnectionType'
def get_devices(self):
return {
'device_identifier_1': {...},
...
}
Vezérlő¶
Miután a felület lekérte az észlelt eszközök listáját, végigmegy az összes Vezérlőn, amelyeknek ugyanaz a connection_type attribútuma, és teszteli az adott eszközökön a supported metódusukat. Ha egy Vezérlő supported metódusa True értéket ad vissza, akkor az adott eszközhöz létrejön egy példány ebből a Vezérlőből.
Megjegyzés
A vezérlők supported metódusai prioritási sorrendben vannak megadva. Egy gyermekosztály supported metódusát mindig a szülőjéé előtt tesztelik. Ez a prioritás a Vezérlő priority attribútumának módosításával állítható be.
Egy új Vezérlő létrehozása megköveteli:
A
DriverkiterjesztéseA
connection_typeosztályattribútum beállítása.A
device_type,device_connectionésdevice_nameattribútumok beállítása.A
supportedmetódus definiálása
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):
...
Kommunikáció az eszközökkel¶
Miután az új eszköz észlelésre került és megjelenik az IoT modulban, a következő lépés a kommunikáció vele. Mivel a doboznak csak helyi IP-címe van, csak ugyanarról a helyi hálózatról érhető el. A kommunikációnak ezért a böngésző oldalon, JavaScript-ben kell történnie.
A folyamat a kommunikáció irányától függ: - A böngészőtől a dobozig, Actions segítségével - A doboztól a böngészőig, Longpolling segítségével
Mindkét csatorna ugyanabból a JS objektumból érhető el, a DeviceProxy-ból, amelyet az IoT Box IP-címével és az eszköz azonosítójával példányosítanak.
var DeviceProxy = require('iot.DeviceProxy');
var iot_device = new DeviceProxy({
iot_ip: iot_ip,
identifier: device_identifier
});
Műveletek¶
A műveleteket arra használják, hogy egy kiválasztott eszközt egy adott művelet végrehajtására utasítsanak, például egy kép készítésére, egy nyugta nyomtatására stb.
Megjegyzés
Meg kell jegyezni, hogy ezen az útvonalon a doboz nem küld „választ”, csak a kérés állapotát. Az akcióra adott válasz, ha van ilyen, a longpolling segítségével kérhető le.
Egy művelet végrehajtható a DeviceProxy objektumon.
iot_device.action(data);
A meghajtóban definiáljon egy action metódust, amely végrehajtásra kerül, amikor egy Odoo modulból hívják. Az argumentumként a hívás során megadott adatokat veszi át.
def action(self, data):
...
Hosszú lekérdezés¶
Amikor bármely Odoo modul adatot szeretne olvasni egy adott eszközről, létrehoz egy hallgatót, amelyet a doboz IP/domain és az eszköz azonosítója azonosít, és átad neki egy visszahívási függvényt, amelyet minden alkalommal meghívnak, amikor az eszköz állapota megváltozik. A visszahívást az új adatokkal hívják meg argumentumként.
iot_device.add_listener(this._onValueChange.bind(this));
_onValueChange: function (result) {
...
}
A meghajtóban egy esemény felszabadul az event_manager device_changed függvényének hívásával. Az összes visszahívás, amely a hallgatón be van állítva, ezután self.data argumentummal kerül meghívásra.
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)