pfSense: Zugriff auf das ADSL-Modem (im Bridge Mode) über die pfSense Firewall

Einleitung
Der Zugriff auf das Webinterface des ADSL-Modems kann bei der Fehlersuche sehr hilfreich sein. Wird die PPPoE Verbindung durch das Modem erstellt und die Firewall erhält an ihrem WAN-Interface eine IP aus dem gleichen IP-Bereich wie das Modem, so kann die Weboberfläche ganz einfach mit der zugeteilten IP-Adresse erreicht werden.

ADSL-Modem - pfSense
Das ADSL-Modem und die pfSense Firewall sind im gleichen IP-Bereich
Diese Konfiguration hat den Nachteil des doppel NAT. Das heisst: das Modem und die Firewall müssen sich die IP-Verknüpfung der ein- und ausgehenden Verbindungen merken. Um diesen zusätzlichen Aufwand zu verringern, kann das Modem im Bridge Mode betrieben werden und die PPPoE-Einwahl wird an die pfSense Firewall deligiert.

Das ADSL-Modem im Bridge Mode und die PPPoE-Einwahl wird durch die pfSense Firewall erledigt.
Wird nun versucht die Weboberfläche des Modems zu erreichen, wird eine Fehlermeldung erscheinen, dass diese Seite nicht erreichbar ist.

pfSense und Modem konfigurieren

Diese Anleitung gilt nur für die pfSense Firewall ab Version 2.x

  1. Dem Modem eine fixe IP zuweisen
  2. Neues Interface auf der Firewall erstellen
  3. Outbound NAT Regel erstellen

Konfigurieren des Modems

Wichtig: Bei der Wahl des IP-Bereiches für das Modem, darf dieser Bereich in keinem Interface auf der Firewall bereits verwendet werden. Hier im Beispiel wurde der Bereich 192.168.100.0/30 gewählt. Somit sind gerade 2 Hosts in diesem IP-Bereich möglich.

  • IP Modem : 192.168.100.1, Subnetmaske: 255.255.255.252
  • IP pfSense: 192.168.100.2, Subnetmaske: 255.255.255.252

Wie das Modem konfiguriert wird, kann man in der Anleitung zum jeweiligen Modell nachlesen.

IP-Einstellungen im Modem
IP-Einstellungen bei einem D-LINK DSL-320B Modem

Erstellen eines zusätzlichen Interfaces

Dazu wird unter “Interfaces-> (assign)” ein neues Interface hinzugefügt. Dieses Interface erhält als IP: 192.168.100.2 und als Subnetmask 255.255.255.252. Als Netzwerkkarte wird diejenige zugewissen an der das ADSL-Modem angeschlossen wurde. In diesem Fall verwendet das WAN-Interface (PPPoE1) die Netzwerkkarte re0.

pfSense Interfaces
Interface-Auflistung mit dem neu erstellten ADSLModem Interface

Outbound NAT

Zum Schluss muss nur noch das “Outbound NAT” konfiguriert werden. Dieses findet man unter “Firewall-> NAT-> Outbound”.

Folgende Werte müssen eingegeben werden:

  • Interface: Das oben neu erstellte Interface
  • Protocol: any (zum Einschränken gewünschtes Protokoll wählen)
  • Source: any (zum Einschränken gewünschtes Subnet wählen)
  • Destination: 192.168.100.0/30
  • Translation: Interface address
pfsense outbound nat
Die neu erstellte "Outbound NAT" Regel

Nach diesem Schritt ist das ADSL-Modem / die Weboberfläche, über die pfSense Firewall, erreichbar.

Nützliche Links

pfSense 1.2.x – Accessing modem from inside firewall
Ein nützliches Web-Tool um IP-Bereiche zu berechnen

Kubuntu: System bleibt mit der Meldung “Checking battery state … [OK]” hängen

Nach dem Installieren von Updates kann das System nicht mehr gestartet werden und bleibt mit der Meldung “Checking battery state … [OK]” hängen.
Eine mögliche Ursache für dieses Problem kann ein aktualisierter Kernel sein. Wurde eine neuere Kernel-Version installiert, muss der Grafiktreiber unter Umständen nochmals neu installiert werden.

Da das Betriebssystem nicht mehr hochgefahren werden kann, muss dies mit Hilfe der Konsole gemacht werden. Bei der angezeigten Meldung “Checking battery state … [OK]” wird mit der Tastenkombination “ctrl+alt+F1” in eine Konsole gewechselt. Nach dem Anmelden mit Benutzernamen und Passwort, wird mit apt-get der Grafiktreiber neu installiert.

Hier in diesem Beispiel handelt es sich um eine nvidia Grafikkarte (GeForce Serie 5 bis 9):


>sudo apt-get install --reinstall nvidia-173

Wurde der Grafiktreiber erfolgreich installiert, muss das System neu gestartet werden:


>sudo reboot

Nach dem Neustart sollte das System wieder erfolgreich hochgefahren werden.

Nützliche Links

11.10 stops booting at “Checking battery state … [OK]”
After updating kernel to 3.0.0-14 the system does not boot
Paket: nvidia-173

VBScript: Microsoft DNS-Server Einträge bearbeiten

Mit Hilfe der “DNS WMI Services” kann der Microsoft DNS Server verwaltet werden. Dies ermöglicht das Erstellen von Skripts zum Hinzufügen, Löschen oder Editieren von Zonen und Records.

Um mit den “DNS WMI Klassen” zu arbeiten sind folgende Schritte notwendig:

  1. WMI Service initiieren (remote oder lokal)
  2. Mit Hilfe des WMI Service kann dann die benötigte “DNS WMI Klasse” instanziiert werden

Lokalen WMI Service initiieren:


Dim objWMIService: Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\MicrosoftDNS")

Remote WMI Service initiieren:


Dim objSWbemLocator: Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Dim objWMIService: Set objWMIService = objSWbemLocator.ConnectServer(hostIP, _ 
		"root\MicrosoftDNS", _ 
		username, _ 
		password, _ 
		"", _ 
		"") 	

Die Parameter:

  • hostIP = IP des DNS-Server
  • username = Benutzername
  • password = Passwort

Neue “Primary-Zone” erstellen:


Dim objDNSZone: Set objDNSZone = objWMIService.Get("MicrosoftDNS_Zone")
objDNSZone.CreateZone(zoneName,0)

Bedeutung der Parameter:

  • zoneName = Name der neuen Zone (monsterli.ch, switch.ch, usw.)
  • 0 = Zone des Typs: “primary zone”

Neue “Secondary-Zone” erstellen:


Dim objDNSZone: Set objDNSZone = objWMIService.Get("MicrosoftDNS_Zone")
objDNSZone.CreateZone(zoneName,1,false,zoneName & "dns",array(nsMasterIP))

Dabei sind die Parameter:

  • zoneName = Name der neuen Zone (Domain)
  • 1 = Zone des Typs: “secondary zone”
  • false = keine “AD integrated zone”
  • zoneName & “dns” = Name der Zonendatei
  • array(nsMasterIP) = Array mit der IP des primären Server dieser Zone

Neuer A-Record erstellen:


Dim objItem: Set objItem = objWMIService.Get("MicrosoftDNS_AType")
objItem.CreateInstanceFromPropertyData(masterDNSServer, zoneName, subZoneName , 1, 600, hostIP)

Die Parameter:

  • masterDNSServer = IP des primären Server
  • zoneName = Name der Zone (Domain)
  • subZoneName = gewünschter Hostname (www, mail, ftp… usw.)
  • 1 = Record Class IN (Internet)
  • 600 = TTL in Sekunden
  • hostIP = IP-Adresse des Hosts

Um weitere Records wie NS, MX, CNAME, usw. zu erstellen, muss einfach die “DNS WMI Class” geändert werden.

Zone löschen:

Um eine bestehende Zone zu löschen wird mit Hilfe der “.Get” Funktion des WMI-Service die Zone selektiert und gelöscht.


Dim objServer: set objServer = objWMIService.Get("MicrosoftDNS_Server.name="".""")
Dim objItem: Set objItem = objWMIService.Get("MicrosoftDNS_Zone.ContainerName=""" & zoneName & """,DnsServerName=""" & objServer.name & """,Name=""" &  zoneName & """")
if isObject(objItem) then
	objItem.delete_
end if

Benutzte Parameter:

  • zoneName = Name der Zone die gelöscht werden soll
  • objServer.name = Name des verwendeten DNS-Server
  • zoneName = Name der Zone die gelöscht werden soll

Nützliche Links

DNS WMI Provider Samples—Managing DNS Zones

Intel Modular Server – Firmware aktualisieren

Der Hersteller Intel bietet für seine “Modular Server Systeme” regelmässige Firmware-Updates an. Daher sollte man die Firmware-Versionen verfolgen und das System auch aktuell halten.
Dies hilft nicht nur mögliche Schwachstellen im System zu beseitigen, sondern ermöglicht es auch aktuelle Hardware (Computing Module) einzubauen. Sollte ein “Computing Module” den Dienst verweigern und muss mit einem neuen ersetzt werden, kann das neue “Computing Module” nur in ein System mit einer aktuellen Firmware-Version installiert werden.

Vorbereitung Firmware-Update

Um eine möglichst reibungslose Installation der neuen Firmware durchführen zu können, sollten folgende Punkte berücksichtigt werden.

  1. Das Aktualisieren der Firmware dauert ca. 1 Stunde.
  2. Firmware-Version für das richtige “Modular Server Chassis” wählen. (MFSYS25 oder neuer MFSYS25V2)
  3. Sind alle Abhängigkeiten der neuen Firmware-Version erfüllt? (Bsp: Installation von 6.8 verlangt eine installierte Firmware-Version >= 2.7)
  4. Sämtliche “Computing Module” müssen vor dem Update heruntergefahren werden.
  5. Der Netzwerkanschluss des CMM-Moduls sollte direkt mit dem Update-Rechner oder einem externen Switch verbunden sein. Nicht über den Modular Server Switch, da diese Firmware auch aktualisiert wird.
  6. Wenn das gewünschte Firmware-Update Paket heruntergeladen wurde, muss die Firmware noch entpackt werden. (Bsp: MFSYS25_MFSYS35_UFU_V6_8.zip) Die Firmware befindet sich dann in der Zip-Datei CMM_Core.zip. Diese darf nicht weiter entpackt werden!

Firmware-Update durchführen

Mit folgenden Schritten wird das Update durchgeführt:

Modular Server Menü
1) Firmware Menü beim Intel Modular Server
Firmware Upload
1) Hochladen der Firmware auf den Modular Server

  1. Unter dem Menü: “Settings-> Firmware” wird die Datei CMM_Core.zip hochgeladen.
  2. Nach dem die Firmware erfolgreich hochgeladen wurde, muss das “Storage Control Modul” in den “safe-modus” versetzt werden. Es erscheint eine Meldung, welche bestätigt werden muss.
  3. Die Installation der neuen Firmware kann nun gestartet werden.
  4. Danach erfolgt ein Neustart bei dem das System auf die neue Version aktualisiert wird.
  5. Sobald das CMM wieder mit dem Webbrowser erreichbar ist, kann unter dem Menü “Settings-> Firmware” beobachtet werden, was gerade aktualisiert wird. (Switch, Storage Control Modul…)
  6. Als nächstes werden die “Computing Modules” mit der neuen Firmware aktualisiert. Dazu werden die einzelnen Module nacheinander eingeschaltet und so automatisch mit der neuen Firmware aktualisiert. Wurde die neue Firmware erfolgreich aktualisiert, sollte bei jedem “Computing Module” das BIOS auf die Standarteinstellungen zurückgestellt werden. (BIOS reset to default F9)

Storage safe-mode
2) "SCM" wird in den safe-mode versetzt
Firmware-Update starten
3) Firmware Aktualisierung kann gestarted werden
Update Computing Modul
6) Aktualisieren der "Computing Module"

Nützliche Links

Intel Downloadcenter
MFSYS25 Training video for Windows
Thomas-Krenn Modular Server Wiki

Routingtabelle: statische Routen definieren unter: Windows, Debian Linux und Esxi-Server

Wenn eine Routingtabelle mit statischen Routeneinträge ergänzt werden soll, was bei einer VPN-Verbindung nötig sein kann, gibt es für die verschiedenen Betriebssysteme einen Befehl “route”. Dieser Befehl ist unter Windows und Linux sehr ähnlich. Der grösste Unterschied ist bei den permanenten Routings.

Einträge in der Rountingtabelle anzeigen:

  • unter Windows
    >route print

    Routingtabelle unter Windows
    Routingtabelle unter Windows
  • unter Linux
    >route

    Routingtabelle unter Linux
    Routingtabelle unter Linux
  • unter Esxi-Server
    >esxcfg-route -l

    Routingtabelle Esxi
    Routingtabelle Esxi

Eintrag in der Routingtabelle erstellen:
Achtung: Wenn das Betriebssystem neugestartet wird gehen die Einträge verloren, da es sich nicht um permanente Einträge handelt.

  • unter Windows
    >route add 192.168.7.0 MASK 255.255.255.0 10.50.147.66
  • unter Linux
    >route add -net 192.168.7.0 netmask 255.255.255.0  gw 10.50.147.66 dev eth0
  • unter Esxi-Server
    >esxcfg-route -a 192.168.7.0 255.255.255.0 10.50.147.66

Eintrag in der Routingtabelle löschen:

  • unter Windows
    >route delete 192.168.7.0 MASK 255.255.255.0 10.50.147.66
  • unter Linux
    >route del -net 192.168.7.0/24  gw 10.50.147.66
  • unter Esxi-Server
    >esxcfg-route -d 192.168.7.0/24 10.50.147.66

Permanenter Eintrag in der Routingtabelle erstellen:
Nach einem Neustart des Betriebssystemes sind diese Einträge wieder in der Routingtabelle vorhanden.

  • unter Windows muss nur der Parameter -p mitgegeben werden, damit dieser Eintrag permanent wird.
    >route add 192.168.7.0 MASK 255.255.255.0 10.50.147.66 -p
  • unter Linux ist es ein wenig aufwändiger, es muss ein Eintrag in der Datei “/etc/network/interfaces” erstellt werden.
    
    iface eth0 inet static
          address 10.50.147.99
          netmask 255.255.255.0
          network 10.50.147.0
          broadcast 10.50.147.255
          gateway 10.50.147.1
          dns-nameservers 10.50.147.1 10.50.147.2
    
    #hinzufügen der statischen permanenten Route
    up route add -net 192.168.7.0 netmask 255.255.255.0  gw 10.50.147.66 dev eth0
    
  • unter Esxi-Server wird ein Eintrag in der Datei “/etc/sysconfig/static-routes” erstellt.
    
    #hinzufügen der statischen permanenten Route
    any net 192.168.7.0 netmask 255.255.255.0  gw 10.50.147.66
    

Zum starten der Esxi-Konsole (unsupported modus: left alt key + F1, type: unsupported)

Vmware Knowledge Base: Adding a static route to an ESX host
Esxcfg-Hilfe
Linux: man route

Multicast Sender & Empfänger mit Python

Die Kommunikation über eine Punkt-zu-Punkt-Verbindung ist in den meisten Anwendungen der richtige Weg. Was aber wenn mehrere Empfänger die gleichen Informationen erhalten wollen? Da zeigt sich dann ein grosser Nachteil der Punkt-zu-Punkt-Verbindungen. Pro Empfänger muss eine Verbindung hergestellt werden um dann die gleichen Informationen mehrfach zu verschicken, was zu Engpässen in der Bandbreite führen kann. Um dies zu vermeiden, kann mit Hilfe von Multicast eine sogenannte Punkt-zu-Gruppe-Verbindung hergestellt werden. Der Sender verschickt eine einzige Nachricht an eine ganze Gruppe von Empfängern und die Netzwerkinfrastruktur sorgt dafür, dass jeder interessierte Empfänger die Informationen auch erhält. Die Kommunikation geschieht über eine spezielle Multicast-Adresse (Multicast-Group) die aus dem IPv4-Bereich 224.0.0.0 bis 239.255.255.255 stammen muss. Dieser IP-Bereich ist für Multicast reserviert und wird von Routern und Switches speziell behandelt. Die Multicast-Pakete werden über UDP versendet.

Ein gutes Beispiel eines Multicast Senders und Empfänger habe ich auf der Webseite von Doug Hellmann gefunden.

Der Multicast Sender
In diesem Beispiel müssen sich die Empfänger nicht beim Sender anmelden, daher kann der Sender nicht wissen wie viele Antworten zu erwarten sind. Aus diesem Grund wartet der Sender solange auf eine Antwort bis der festgelegte Socket-Timeout erreicht wurde.

Hier die wichtigsten Code-Zeilen:


# Create the datagram socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Set a timeout so the socket does not block indefinitely when trying
# to receive data. (in sec flaot)
sock.settimeout(1.0)

# Set the time-to-live for messages to 1 so they do not go past the
# local network segment.
ttl = struct.pack('b', 1)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)

try:        
	# Send data to the multicast group
	print >>sys.stderr, 'sending "%s"' % message
	sent = sock.sendto(message, multicast_group)

	# Look for responses from all recipients
	while True:
		print >>sys.stderr, 'waiting to receive'
		try:
			data, server = sock.recvfrom(16)
		except socket.timeout:
			print >>sys.stderr, 'timed out, no more responses'
			break
		else:
			print >>sys.stderr, 'received "%s" from %s' % (data, server)        
finally:
	print >>sys.stderr, 'closing socket'
	sock.close()

Der Multicast Empfänger
Der Empfänger lauscht auf allen Netzwerkinterfaces auf Daten seiner Multicast-Gruppe und schickt eine Empfangsbestätigung zurück.

Hier die wichtigsten Code-Zeilen:


# The first step to establishing a multicast receiver is to create 
# the UDP socket.
server_address = ('', 10000)

# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Bind to the server address
sock.bind(server_address)

# Tell the operating system to add the socket to 
# the multicast group on all interfaces.
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)


# Receive/respond loop
while True:
	print >>sys.stderr, '\nwaiting to receive message'
	data, address = sock.recvfrom(1024)
	
	print >>sys.stderr, 'received %s bytes from %s' % (len(data), address)
	print >>sys.stderr, data

	print >>sys.stderr, 'sending acknowledgement to', address
	sock.sendto('ack', address)

Source Code-Dateien:

Die 7zip-Datei enthält die Dateien:
– MulticastServer.py (Sender)
– MulticastClient.py (Empfänger)
Python – Source Code

Eine ausführbare Version (exe) der Dateien, welche eine vorhandene Installation von Python 2.7.2 erfordert:
– MulticastServer.exe (Sender)
– MulticastClient.exe (Empfänger)
Kompilierte Multicast Beispiele (x64)

Starten des Clients:
(Client empfängt Daten der Multicast-Gruppe 224.0.1.2)


>MulticastClient.exe 224.0.1.2

Starten des Servers und gleichzeitiges verschicken von Daten:
(Server verschickt ein “Hallo Multicast!” an die Multicast-Gruppe 224.0.1.2)


>MulticastServer.exe "Hallo Multicast!" 224.0.1.2

Multicast Server und Client
Multicast Server und Client


– Python: Socket-Dokumentation
– Wikipedia: Multicast

DVD abspielen unter Linux (Ubuntu / Kubuntu)

Wer unter Linux seine gekaufte DVD anschauen möchte und sich denkt: “Einfach DVD einlegen und anschauen”, der wird schnell feststellen, dass es so nicht funktioniert. Die meisten Multimedia-Dateien können unter Linux ohne Probleme abgespielt werden. Dazu gehören die gekauften DVD’s leider nicht, da sie oft verschlüsselt sind.

Damit eine verschlüsselte DVD gelesen werden kann, braucht es das Paket libdvdcss2. Aufgrund rechtlicher Unsicherheiten ist es in vielen Linux-Distributionen (Ubuntu, Debian usw.) nicht enthalten.

Das Paket kann folgendermassen installiert werden:


sudo apt-get install libdvdread4

Wurde die Installation erfolgreich abgeschlossen muss noch das Installations-Skript ausgeführt werden:


sudo sh /usr/share/doc/libdvdread4/install-css.sh

Konnte auch dieses Skript erfolgreich ausgeführt werden, sollte das Abspielen von DVD’s funktionieren.

Detaillierte Informationen zu Ubuntu und Codecs
Wikipedia: Libdvdcss

Warum ist 0.99999999999… = 1?

Eine ganz einfache Rechnung kann doch ganz schön verblüffend sein!

Angenommen wir haben ein Objekt mit der Grösse 1 und teilen dieses in 3 kleinere gleich grosse Stücke, so erhalten wir also 3 Stücke der Grösse (1/3). Wenn wir nun eines dieser Stücke nehmen und mit 3 multiplizieren, sollten wir wieder die Grösse 1 erhalten. Wirklich?

Bruchschreibweise:

(1/3) * 3 = 1
den
1/3 * 3/1 = 1

Nehmen wir doch mal die Dezimalschreibweise:


0.333333... * 3 = 0.999999...

Es scheint so als hätte unser Objekt beim Rechnen an Grösse verloren! Was ist geschehen? Ist also die Zahl 0.999999… (mit einer unendlichen Folge von Neunen) doch 1, somit einfach eine andere Schreibweise für die 1?

Versuchen wir es doch auf eine einfache Art zu beweisen:


Wenn 0.999999... = 1 dann:
0.999999... * 10 = 9.999999...

9.999999...
-0.999999...
-------------
9.000000...

Ergibt also das gleiche wie: 10 - 1 = 9

Eine weitere Möglichkeit ist die algebraische Schreibweise:

Wir definieren: 0.999999... = a

Jetzt führen wir die gleiche Rechnung wie im oberen Beispiel durch:
10a -a = 9
9a = 9
a = 1

Wenn wir nun den Wert einsetzen wofür a steht, erhalten wir:

0.999999... = 1

Somit ist also klar, dass 0.999999… nur eine weitere Schreibweise für die einzigartige natürliche Zahl Eins ist.

Weitere interessante Beispiele zu den Zahlen, findet man im Buch von Peter J. Bentley mit dem Titel “Das Buch der Zahlen”.

Nützliches

ZMS2: Hinzufügen des “google-site-verification” Meta-Tag

Bevor man die Google Webmaster-Tools verwenden kann, wird durch Google die “Eigentümerschaft” einer Webseite überprüft. Dazu wird die Webseite mit einem “google-site-verification Code” markiert. Dies kann auf verschiedene Arten geschehen:

  • Man lädt eine Datei ins Root-Verzeichnis, welche den Code enthält
  • Definiert den “google-site-verification” Meta-Tag auf der Startseite
  • Man verwendet das Google Analytics-Konto

Um nun bei einem ZMS-Web einen neuen Meta-Tag hinzuzufügen gibt es 2 Möglichkeiten:

  1. Meta-Tag unveränderlich in das Meta-Tag Template integrieren
  2. Meta-Tag im ZMS Content-Object ergänzen, damit es über das Webgui beliebig verändert werden kann

1. Meta-Tag unveränderlich in das Meta-Tag Template integrieren

Zum Template gelangt man über die Navigation “/commen/[Name des ausgewähltes Theme]/headMeta_Local”. Die Template-Datei “headMeta_Local” kann jetzt mit dem neuen Meta-Tag ergänzt werden.
headMeta_Local anpassen

2. Meta-Tag im ZMS Content-Object ergänzen

Dazu müssen wir im ZMS Conten-Object zuerst den neuen Meta-Tag definieren. Über das Menü wechselt man auf: “[Name der Webseite] » Konfiguration » Content-Objekte”.

ZMS Conten-Object anpassen
Um das ZMS-Content-Object zu editieren, klickt man in der Baumstruktur auf den Node “ZMS”.

zms-content-objekt

Jetzt kann der neue Meta-Tag definiert werden. Dazu wird in der Spalte ID und Anzeige der Meta-Tag Name “google-site-verification” eingegeben, als Typ wird “string” ausgewählt.

neuer Meta-Tag erfassen

Ist der neue Meta-Tag definiert worden, müssen wir wie bei der ersten Methode beschrieben, noch das Template anpassen. Diesmal wird der Wert des Meta-Tag jedoch nicht fix hinterlegt, sondern kann im Webgui verändert werden. Dazu muss im “headMeta_local” Template der Meta-Tag folgendermassen eingetragen werden:

[cc lang=”HTML”]” />[/cc]

Nach dieser Änderung kann der “google-site-verification Code” über das Webgui verändert / eingetragen werden und das ZMS-Web wird diesen Meta-Tag im HTML-Header führen.

zms-webgui

Google Webmaster-Tools
Bing Webmaster-Tools

Staubsaugerroboter – Hoovie (2008)

Das Projekt “Staubsaugerroboter” war eine Gruppenarbeit im Herbstsemester 2008. Dabei wurde die Steuerungssoftware für den Roboter mit dem “Lego Java Operating System” erstellt. Der Simulator wurde mit Java entwickelt.

Aufgabenstellung

Um die Aufgabenstellung zu erfüllen, musste ein Lego-Roboter, die dazugehörige Steuersoftware und einen Simulator erstellt werden. Dabei war das Ziel, dass der Roboter die ganze Fläche eines beliebigen Raumes in möglichst kurzer Zeit reinigt. Die Simulation sollte das gleiche Verhalten zeigen wie der Lego-Roboter.

Die Simulation hatte folgende Kriterien:

  • Visualisierung der Fläche und des Roboters (Roboter färbt die gefahrene Fläche)
  • Schnittstelle für Statistiken (Ausgabe der Fläche pro Zeit im CSV-Format)
  • 2-3 Bewegungsstrategien (Brown‘sche Bewegung, Random Walk, Parallelfahrt)
  • Simulation und Roboter sollen das gleiche physikalische Verhalten zeigen (Distanz, Geschwindigkeit (Dreh usw.), Ablaufgeschwindigkeit einstellbar)

Bilder

Das GUI des Simulator
Das GUI des Simulator

Simulation mit "RandomTurn"
Simulation mit "RandomTurn"

Simulation mit "Adaptive Brown" und einer Karte mit mehreren Hindernissen
Simulation mit "Adaptive Brown" und einer Karte mit mehreren Hindernissen

Das Lego Modell von Hoovie
Das Lego Modell von Hoovie