(Distributed Sensor Networks DSN)
Ein verteiltes Sensornetzwerk besteht aus einer Menge von Sensor Knoten N={n1,n2,…}, die in einem Kommunikationsnetzwerk miteinander verbunden sind.
Ein Sensorknoten besteht aus:
Verteilte Sensornetzwerke unterscheiden sich von klasschischer Datenverarbeitung
DSN können räumlich und zeitlich verteilt sein - ohne zentralen Rechner
Das Netzwerk selber ist der Rechner - eine virtuelle Maschine
Die Hauptaufgabe eines DSN ist die Sammlung und Verarbeitung sensorischer Daten
Eingabe, Berechnung, Kommunikation, und Programmierung müssen zusammenhängend und nicht unabhängig betrachtet werden à Entwurf eines Systems
Für jeden dieser Bestandteile gibt es unterschiedliche Teilaspekte und Variationen, die die Struktur und die Performant des gesamten DSN bestimmen.
Die Funktion beschreibt die grundlegenden Operationen und Fähigkeiten des DSN.
Die Implementierung beschreibt die Methoden mit denen die Funktionen erfüllt werden können.
Definition 1.
Ein Netzwerk G besteht aus Knoten N={n1,n2,…} und Verbindungen (Kanten) C={c1,c2,..}, die die Knoten untereinander verbinden. Das Netzwerk kann als ein Graph G(N,C) beschrieben werden, der i.A. zyklisch und gerichtet ist.
Gesamtzahl der Knoten, die ein Netzwerk oder ein Subnetzwerk bilden
Jeder Knoten hat mindestens eine, maximal K Verbindungen zu Nachbarknoten
Lässt sich das Netzwerk für belibiege Anzahl N von Knoten erweitern?
Maximaler Abstand (Distanz) zwischen zwei Knoten
Anzahl der Kanten NC
Anzahl der Kanten NC im Verhältnis zur Anzahl der Knoten N
Verzögerung Τ bei der Zustellung von Daten durch Vermittlung (normiert und vereinfacht in Anzahl von Zwischenknoten)
Datendurchsatz (Bandbreite)
I2C: Inter-Integrated Circuit
Für I2C sind nur zwei Drähte erforderlich, z. B. asynchrone serielle Kabel.
Diese beiden Drähte können jedoch bis zu 1008 Slave-Geräte unterstützen.
Im Gegensatz zu SPI kann I2C ein Multi-Master-System unterstützen, sodass mehr als ein Master mit allen Geräten am Bus kommunizieren kann (obwohl die Master-Geräte nicht über den Bus miteinander kommunizieren können und sich über die Busleitungen abwechseln müssen ).
Die Datenraten liegen zwischen asynchroner serieller und SPI. Die meisten I2C-Geräte können mit 100 kHz oder 400 kHz kommunizieren.
Mit I2C ist ein gewisser Overhead verbunden. Für jeweils 8 zu sendende Datenbits muss ein zusätzliches Bit Metadaten (das “ACK / NACK” -Bit) übertragen werden.
Das Inter-Integrated Circuit (I2C) -Protokoll ist ein Protokoll, mit dem mehrere integrierte digitale Slave-Schaltkreise (“Chips”) mit einem oder mehreren “Master”-Chips kommunizieren können.
Es ist nur für die Kommunikation über kurze Entfernungen innerhalb eines einzelnen Geräts vorgesehen.
Wie bei asynchronen seriellen Schnittstellen (wie RS-232 oder UARTs) sind für den Informationsaustausch nur zwei Signalleitungen erforderlich.
Algorithm 1.
Ad-hoc Netzwerke deren Struktur und Verbindungen sich erst zur Laufzeit bilden.
Dabei kann sich die Struktur (Netzwerktopologie) dynamisch ändern.
Es können Knoten und Verbindungen zwischen Knoten hinzukommen und verschwinden.
Selbstorganisation und Selbstkonfiguration können wesentliche Prinzipien wärend der Bildung und danach sein.
Übliches Designziel: klein und gunstig
Mikroprozessor
Speicher
Sensorik
Drahtlose Kommunikation
Energieversorgung
Keine zentrale Infrastruktur
Aufgaben
Geringes Energiebudget
Geringer Speicher, geringe Rechenleistung
Viele Sensorknoten
Geometrie
Redundanz, Unzuverlassigkeit und Dynamik
|
|
IP-4 | IP-6 |
Der RPC dient der Klienten-Server Kommunikation, wobei anders als bei HTTP Servern die Rolle von Klient und Server beliebig getauscht werden kann
Es gibt drei Operationen:
Der Serverprozess gibt die Verarbeitung von RPC Anfragen auf einem bestimmten Port bekannt.
Der Serverprozess sendet eine Antwort auf eine RPC Anfrage
Der Klientenprozess sendet eine RPC Anfrage an einen Server (port) und wartet auf die Antwort
rpc = rpc:new()
function (host:string,port:number,handler: function (data:table) → table|nil)
Ein Server wird gestartet. Die benutzerdefinierte Handlerfunktion wird bei jedem Request aufgerufen und muss einen Datenrekord zurückgegben (oder nil)
function (client:userdata, data:table)
Der Server sendet die Rückantwort (implizit in rpc:getreq enthalten)
function (host:string,port:number,data:table) → error:nil|string,table|nil
Ein Servertransktion durch einen Klienten.
Beispiel 1.
local rpc = rpc:new()
rpc:getreq('127.0.0.1',12345, function (request)
local reply = {}
print(request)
case request.cmd of
"square" => y=request.x*request.x; reply = { status = "OK", y = y } end
"sqrt" => y=math.sqrt(request.x); reply = { status = "OK", y = y } end
else reply = {status = "EINVALIDMCD" } end
end
return reply
end)
Beispiel 2.
local rpc = rpc:new()
local err,reply = rpc:trans('127.0.0.1',12345,
{
cmd='square',
x=math.random()
})
if err then print(err) else print(reply) end