Mit Datenaggregation und Sensorfusion
PD Stefan Bosse
Universität Bremen - FB Mathematik und Informatik
Modul OS: LuaOS für Sensornetzwerke
Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation
Nachrichtenbasierte Gruppenkommunikation
myroute = route:new(url)myport = myroute:connect()myid = myroute.idstatus = myroute:ping()
Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation
status = myroute:create(groupname)
status = myroute:join(groupname)
members = myroute:ask(groupname)
members = myroute:unjoin(groupname)
Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation
status = myport:connect(peerid,birdir?)
Wenn das bidir Argument gesetzt wird, kann auch die andere Seite Nachrichten direkt zurücksenden.
status = myport:write(datat,peerid?)
data,err = myport:read()
status = myport:disconnect(peerid)
Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation
Die Empfangsoperation blockiert den Prozessfluß und sollte daher in einer Koroutine in einer Schleife ausgeführt werden:
co = coroutine.create(function () local err; while not err do local data,err = myport:read() .. endend); coroutine.resumeCatch(co)
Alternative ist die Einrichtung einer Rückruffunktion und asynchroner Nachrichtenverarbeitung:
myport:receiver(function (data,err) ...end)
Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation
lvm luasrouter [-v -h] [-sec keynameORport ] [-host IP/URL/?] [-port NUM] [-portHTTP NUM] [-portWS NUM]
lvm luasrouter -host 134.102.219.1
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC
Virtual Group Remote Procedure Call
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC
edu-9.de:22223
);vgroup = vgrpc:new(url,group,verbose,timeout);vgroup.error -- Fehlerstatusvgroup.port.peerid -- Meine PeerIDvrgoup.router, vgroup.port -- Router/PeerPort
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC
Gruppen sind dynamisch. Aktuelle Gruppenmitglieder können über den Gruppenservice abgefragt werden (vgroup:router:ask(group)
)
Der eigene Port muss noch explizit mit den aktuellen Gruppenmitgliedern verbunden werden (oder später wieder verlassen werden):
vgroup:enter() -- connect with all group membersvgroup:leave() -- disconnect from all group members
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC
local function foo (x,y) return x*y endvgroup:service("foo",foo);data = vgroup:call('foo',1,2) -- table!, oder :trycall(timeout,..)
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC
-- coroutine?data = vgroup:receive(tag,timeout?) -- table!mygroup:send(tag,data)
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC
container = vgroup:container(tag,timeout)vgroup:send(tag,math.random())data = container:await() -- table!
Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC