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.1Modul 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/PeerPortModul 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 membersModul 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