# Entwicklung einer Software zur Steuerung und Überwachung von Netzwerkgeräten



## flossy (31. Aug 2009)

Hallo zusammen,

ich möchte eine Software (mit Java) entwickeln, die es ermöglicht, verschiedenste Geräte über Netzwerk zu steuern und zu überwachen.
Die Steuerung soll dabei so allgemein gehalten werden, dass jeder Zeit neue Gerätetypen hinzugefügt werden können, ohne dass die Applikation neugestartet geschweige denn verändert werden muss.

Hierzu habe ich mir folgende Architektur überlegt:

= Agenten =

 * Jedes Gerät wird durch einen "Agenten" repräsentiert, welcher durch ein einheitliches Agenten-Interface beschrieben ist.
 * Je nach den Funktionen des Gerätes bietet der Agent entsprechende Funktionen an
 * Jeder Agent hat eine eigene IP-Adresse 

= Server =

* Ein Server verwaltet die Agenten (und damit die Geräte) und ihre Funktionen
* Zur Laufzeit können damit Agenten eingebunden werden und ihre Funktionen dem Client zur Verfügung gestellt werden

= Webserver =

* Der Webserver stellt die GUI zur Verfügung
* Zu jedem Agenten-Typ, gibt es eine GUI,
* falls keine GUI existiert, so wird eine Liste der Funktionen ausgegeben

= Client =

* Der Client ist entweder ein Browser (Zugriff auf Webserver) oder
* Ein Komandozeilenprogramm (Zugriff direkt auf Server oder Agent)

Also nochmals anders an einem Beispiel ausgedrückt:

Ein Sensor kommuniziert z.B. über RS232 mit einem miniPC, auf dem ein Agent (und eine JVM) läuft. 
Der Agent stellt z.B. die Funktionen "getActualValue()", "getMaxValue()", ..., "setConfig(String cfg)" zur Verfügung.
Der Server stellt eine TCP-Verbindung zum Agenten her und holt sich mit "getFunctions()" die möglichen Funktionen.
Diese Funktionen werden mit dem Webserver (zB. Tomcat & Spring) den jeweiligen GUI-Elementen zugeordnet. Ein Graph greift zB. zur Aufzeichnung des Verlaufs alle 2 Sekunden auf die Funktion "getActualValue()" zurück.
Mit dem Browser können dann die Sensorwerte einem User zugänglich gemacht werden. 

Ich hoffe es ist zumindest prinzipiell mein Vorhaben klar geworden.

Meine Fragen:

 - Sind diese Überlegungen Zukunftsfähig? Oder auch ander gefragt: Habe ich mir da nur Blödsinn überlegt?
 - Gibt es alternative Architekturen, die ähnlich flexibel sind?
 - Wie kann ich die Funktionen der Agenten (die ja unterschiedlich sind und zur Zeit der Entwicklung nicht bekannt sind) dynamisch bereitstellen und entsprechend aufrufen?
 - Inwieweit können RMI, CORBA, o.ä zur Umsetzung dazu beitragen?

Über ausführliche Antworten, Ideen und Kritik würde ich mich freuen.


----------



## tuxedo (4. Sep 2009)

Das hört sich für mit nach SNMP und UPNP/ZeroConf an ... Ergo: Gibts schon.

Hast du danach mal gegoogelt?


----------



## flossy (4. Sep 2009)

tuxedo hat gesagt.:


> Das hört sich für mit nach SNMP und UPNP/ZeroConf an ... Ergo: Gibts schon.
> Hast du danach mal gegoogelt?


Danke, das ist ein guter Hinweis


----------



## flossy (5. Sep 2009)

Jetzt habe ich noch eine weitere Frage:

Solange jeder Agent eine eigene IP-Adresse hat, kann ich mit diesen über einen Standardport kommunizieren. Wenn nun jedoch mehrere Agenten auf einem Rechner (also eine IP) laufen, so funktioniert dies nicht mehr.
Es gibt dann nur zwei Möglichkeiten:
1. Jeder Agent bekommt einen eigenen Port
2. Es gibt ein Agent-Manager, der die Nachricht weiterleitet.

Ist das richtig?


----------



## tuxedo (7. Sep 2009)

> Solange jeder Agent eine eigene IP-Adresse hat, kann ich mit diesen über einen Standardport kommunizieren. Wenn nun jedoch mehrere Agenten auf einem Rechner (also eine IP) laufen, so funktioniert dies nicht mehr.



Wieso denn?



> Es gibt dann nur zwei Möglichkeiten:
> 1. Jeder Agent bekommt einen eigenen Port



Prinzipiell wäre das eine Möglichkeit. Aber du solltest auch mal drüber nachdenken ob das wirklich der richtige Weg ist.

Wieso muss denn jeder Agent einen Serverport öffnen? Und wieso muss ein Server so tun als wäre er ein Netzwerkclient und sich zum Agenten verbinden?

Vorrausgesetzt der TCP/IP Stack im uC beherrscht Broadcasts würde ich auf Broadcasts setzen:

Jeder Agent lauscht auf "anfragen". Der Server schickt per Broadcast ein "Hallo, wer ist denn da draußen" raus. Daraufhin meldet sich jeder Agent und gibt bekannt was er wie angeschlossen hat bzw. überwacht. 

Entweder du machst das Wert-Abfragen dann auch über Broadcast, oder der Agent teilt dir über Broadcast mit auf welchem Port er auf "get" und "set" wartet.

Aber alle sin allem sind wir damit wieder bei UPnP/ZeroConf gelandet. 

Router, Drucker, ja sogar VideoEncoder lassen sich in den allermeisten Fällen via UPnP detektieren und auch konfigurieren. 

Ich schlage vor du befasst dich erstmal etwas mit der Materie bevor du anfängst ein System zu entwerfen das es schon gibt und einen Quasi-Standard darstellt.

Gruß
Alex


----------

