Verteilte Sensornetzwerke

Mit Datenaggregation und Sensorfusion

PD Stefan Bosse

Universität Bremen - FB Mathematik und Informatik

1 / 14

Modul OS: LuaOS für Sensornetzwerke

LuaOS

  1. Sensoren
  2. Klassen und Objekte
  3. Kommunikation
  4. Synchronisation
  5. Gruppenmanagement und Gruppenkommunikation
  6. Threads und Coroutinen
  7. LuaOS Router
2 / 14

Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation

Gruppenkommunikation

Nachrichtenbasierte Gruppenkommunikation

  • Nutzt den Gruppenservice des luaosrouter Programms für die Gruppen
  • Gruppenmitglieder können in einem vollständig verbundenen virtuellenNetzwerkgraph miteinander kommunizieren

Routerverbindung

  1. Zuerst muss eine Verbindung zum Router (Gateway) luasosrouter hergestellt und ein virtueller (remote) Kommunikationport erzeugt werden:
myroute = route:new(url)
myport = myroute:connect()
myid = myroute.id
status = myroute:ping()
3 / 14

Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation

Gruppenmanagement

  1. Gruppe erzeugen (wenn sie nicht existiert)
status = myroute:create(groupname)
  1. Einer Gruppe beitreten
status = myroute:join(groupname)
  1. Gruppenmitglieder erfragen
members = myroute:ask(groupname)
  1. Gruppe verlassen
members = myroute:unjoin(groupname)
4 / 14

Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation

Kommunikationskanäle

  1. Verbindung zu einem Gruppenmitglied herstellen:
status = myport:connect(peerid,birdir?)

Wenn das bidir Argument gesetzt wird, kann auch die andere Seite Nachrichten direkt zurücksenden.

  1. Nachricht senden
status = myport:write(datat,peerid?)
  1. Nachrichten empfangen (Sammelpunkt)
data,err = myport:read()
  1. Verbindung zu einem Peer trennen
status = myport:disconnect(peerid)
5 / 14

Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation

Nachrichtenempfang

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()
..
end
end); coroutine.resumeCatch(co)

Alternative ist die Einrichtung einer Rückruffunktion und asynchroner Nachrichtenverarbeitung:

myport:receiver(function (data,err)
...
end)
6 / 14

Modul OS: LuaOS für Sensornetzwerke Gruppenkommunikation

Lua OS Router

lvm luasrouter [-v -h]
[-sec keynameORport ]
[-host IP/URL/?]
[-port NUM]
[-portHTTP NUM]
[-portWS NUM]
  • Soll der Lua OS Router außerhalb des eigenen Rechner im Netzwerk sichtbar sein, muss das Host Argument (lokale IP Adresse des Netzwerkgerätes, keine Domaine!) gesetzt werden, z.B.:
lvm luasrouter -host 134.102.219.1
7 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

Virtuelle Gruppenkommunikation VGRPC

Virtual Group Remote Procedure Call

  • Nutzt den Gruppenservice des luaosrouter Programms für die Gruppen
  • Gruppenmitglieder können in einem vollständig verbundenen virtuellenNetzwerkgraph miteinander kommunizieren
  • Zwei Kommunikationsarchitekturen
    1. Remote Procedure call (RPC)
    2. Container mit Sende- und Empfangsfunktion
8 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

Anmeldung

  • Über die Anmeldung wird:
    1. Eine Verbindung zum dem luaosrouter hergestellt (url, z.B. edu-9.de:22223);
    2. Ein Kommunikationsport mit peerid erstellt;
    3. Die Gruppe group wird erzeugt (wenn nicht vorhanden);
    4. Der neue Port wird der Gruppe hinzugefügt (aber nocht nicht verbunden);
    5. Für Gruppenkommunikation kann Standardzeitablauf (timeout) angegeben werden.
vgroup = vgrpc:new(url,group,verbose,timeout);
vgroup.error -- Fehlerstatus
vgroup.port.peerid -- Meine PeerID
vrgoup.router, vgroup.port -- Router/PeerPort
9 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

Beitreten und Verlassen von Gruppen

  • 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 members
vgroup:leave() -- disconnect from all group members
10 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

Remote Procedure Calls

  • Mittels der call Methode können bei den Gruppenmitlgiedern registrierte Funktionen aufegrufen werden. Der Aufruf wartet auf die Antwort aller Gruppenmitglieder (oder Timeout)
local function foo (x,y) return x*y end
vgroup:service("foo",foo);
data = vgroup:call('foo',1,2) -- table!, oder :trycall(timeout,..)
11 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

Senden und Empfangen von Tag Nachrichten

  • Es können Gruppenmitgliedern auch explizit Nachrichten (mit Tag) gesendet werden
  • Empfang muss registriert werden (receive) - blockiert Programmfluss!
  • Es wird immer auf den Empfang von N Nachrichten von allen Gruppenmitlgiedern gewartet (oder Timeout); bei N+1 Mitgliedern in der Gruppe insgesamt
-- coroutine?
data = vgroup:receive(tag,timeout?) -- table!
mygroup:send(tag,data)
12 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

Nachrichten Kontainer

  • Ein Kontainer kann als Empfänger für getaggte Nachrichten vorher eingerichtet werden
  • Nach der Einrichtung werden nachrichten gesammelt (max. N, oder Timeout ab await Aufruf )
container = vgroup:container(tag,timeout)
vgroup:send(tag,math.random())
data = container:await() -- table!
13 / 14

Modul OS: LuaOS für Sensornetzwerke Virtuelle Gruppenkommunikation VGRPC

14 / 14