linux - net - tech and fun

Mittwoch, Dezember 2 2020

Conbee II Stick im Proxmox LXC Container

Ein USB Gerät an einen Proxmox Container durchzureichen, ist eigentlich relativ einfach. Nach Abarbeitung der folgenden Befehle, findet sich das ttyACM0 device im Container und ist theoretisch verfügbar, jedoch nur theoretisch. Um den Conbee 2 Stick nutzen zu können, ist leider etwas mehr Kreativität gefordert, aber beginnen wir am Anfang. Ahnungslos bin ich der folgenden (durchaus funktionierenden) Anleitung #1 gefolgt,und finde nun das Device im Container. Damit das installierte Phoscon den Stick aber auch finden und nutzen kann ist ein kleiner Trick nötig. Diesen habe ich hier #2 gefuden.

Führen wir den Befehl

GCFFlasher_internal -l

aus, werden wir feststellen, dass hier kein Device gelistet ist. Dies liegt daran, dass deConz intern die udev Datenbank verwendet (/run/udev/data/) welche normalerweise in einem richtigen Linux System durch udev erzeugt wird. Da dies aber hier nicht der Fall ist, wird auch der Stick nicht gefunden. Der Trick an diese Stelle besteht einfach darin, das erwartete Verzeichnis inclusive der Device file anzulegen,

mkdir -p /run/udev/data/

und dann die Conbee Device Info schreiben:

echo -e 'E:ID_VENDOR_ID=1cf1\nE:ID_MODEL_ID=0030' > /run/udev/data/c166:0

Nach Ausführen des Listing Kommandos GCFFlasher_internal -l wird nun auch der Stick sowohl in der Konsole als auch im Phoscon erkannt und kann verwendet werden.

1 http://coldcorner.de/2018/07/12/proxmox-usb-passthrough-fuer-lxc-container-z-wave-uzb1/

2 https://doc.turris.cz/doc/en/public/deconz_lxc_howto

Mittwoch, Februar 14 2018

Broadlink Blackbean RMmini3 - Verbindungsprobleme

Nachdem die Blackbean eine ganze Weile sauber lief, gab es sporadisch Probleme beim Senden von Befehlen aus OpenHAB2 (und auch aus der Konsole). Die Befehle wurden seitens OpenHAB sauber ausgeführt und auch bei manuellem Absetzen des Befehls im Terminal trat erst einmal kein Problem auf: /usr/bin/python /home/malte/BlackBeanControl-master/BlackBeanControl.py -c led_brightdown

Nach einigem Suchen und probieren, stellte ich fest, dass es scheinbar doch einen Socket Timeout Fehler gab:

Traceback (most recent call last):  
File "/home/malte/BlackBeanControl-master/BlackBeanControl.py", line 193, in module
    RM3Device.send_data(DecodedCommand)
  File "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py", line 455, in send_data
    self.send_packet(0x6a, packet)
  File "/usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/__init__.py", line 250, in send_packet
    response = self.cs.recvfrom(1024)
socket.timeout: timed out

Glücklicherweise fand ich im FHEM Forum dazu eine ganz einfache Lösung. Denn scheibar ist die Blackbean zu langsam und benötigt einfach nur einen längeren Timeout. Den kann man direkt in /usr/local/lib/python2.7/dist-packages/broadlink-0.3-py2.7.egg/broadlink/init.py Zeile 249, den Timeout von self.cs.settimeout(1) (1 Sekunde) auf self.cs.settimeout(5) (5 Sekunden) erhöhen.

Damit läuft die Blackbean wieder zuverlässig!

Donnerstag, September 28 2017

[3D Print] Autoleveling hin und zurück

Nachdem ich nun steil darauf hingearbeitet habe, meinen Anet A8 mit Autolevelfunktion auszustatten, habe ich nun wieder auf das normale manuelle Bedleveling und den klassischen Z-Endstop Schalter zurückgewechselt. Während das finden des Z-Endstop Punktes einwandfrei funktionierte und auch das Autobedleveling brauchbare Ergebnisse lieferte, schien es doch an irgendeiner Stelle eine massive Diskrepanz zu geben. Trotz mehrfachem Justieren und Messen, konnte ich nur ab und an und ohne erkennbaren Grund saubere first Layer drucken. Mal startete der Druck zu hoch, manchmal korrekt und das korrigieren des Z-Offsets hatte kaum oder keine Auswirkungen (Skynet 3D 2.3.2). Alle Operationen mit dem ABL Sensor (LJC18A3-H-Z/BX) wurden auf beheiztem Druckbett und Hotend durchgeführt und bei den Messoperationen wurde die Bettheizung deaktiviert um mögliche Seiteneffekte auszuschließen. An welcher Stelle nun genau die Probleme auftraten lässt sich abschließend leider nicht sagen, ich für meinen Teil bin aber mit dem manuellen Leveln und dem klassischen Z-Endstop und den damit verbundenen Ergebnissen absolut zufrieden und sehe selbst bei funktionierendem ABL Sensor nur minimale Vorteile.

Vielleicht hat ja jemand ähnliche Erfahrungen gemacht?

Donnerstag, Juli 13 2017

openHAB2 und der Broadlink RM Mini 3 (Black Bean)

Nachdem ich nun schon einige Zeit erfolgreich und zufrieden die Smarthome Software openHAB verwende möchte ich gern auch ein paar meiner Lösungen vorstellen. OpenHAB steht für open Home Automation Bus und ist quasi das schweizer Taschenmesser das Smarthomebereichs, welches so ziemlich jedes namhafte Lösung steuern und integrieren kann. Nur sehr wenige geschlossene proprietäre Systeme funktionieren nicht mit OpenHAB, sind aber in der Praxis auch eher nicht relevant. Gefühlt lässt sich ziemlich alles steuern, was in irgendeiner Form einen Stecker hat und falls nicht, gibt es immernoch ein paar nette Workarounds, die ähnlich gut funktionieren. Eine Lösung möchte ich hierzu gern vorstellen: Steuerung von IR Geräten mit der Broadlink RM 3 BlackBean.

Hintergrund hierzu war, dass ich mithilfe meines SmartHomes meinen Roomba 780 fernbedienen bzw. starten und stoppen können wollte. Ausserdem unterstützt mein LG Fernseher nicht das EINschalten via Ethernet, lediglich das AUS- und umschalten ist damit möglich. Die Broadlink RM3 Black Bean ist im Prinzip eine Wifi gesteuerte Universalfernbedienung. Mithilfe einer App kann diese ins WLAN gebracht werden und auch Geräte aus einer kleinen Datenbank mit dem RM3 nutzbar gemacht werden. Leider bietet weder der RM3, noch die App eine offizielle API Funktion oder ähnliches zur Steuerung mit z.B. openHAB. Glücklichweise gibt es findige Developer bzw. Analysten, welche die Netzwerkpakete des RM3 analysiert und die Funktionen mittels einer kleinen Pythonanwendung nachgebildet haben. (Anleitung hier: https://github.com/davorf/BlackBeanControl )

Einmal mit der Grundkonfiguration versehen, können jetzt einzelne Tasten einer IR Fernbedienung "gelernt" werden. Hierbei hilft der folgende Befehl:

python BlackBeanControl.py -c Roomba_Clean

Sofern sich in der Datei BlackBeanControl.ini schon ein Befehl mit dem Namen "Roomba_Clean" befindet, wird der entsprechende IR Code ausgesendet. Falls nicht, beginnt die Lernphase. Hierbei wird die Fernbedienung an die BlackBean gehalten und die gewünschte Taste gedrückt, dann sollte eine Meldung erscheinen, dass der Code erfolgreich erkannt wurde. Nach Ablauf des Timeout kann der Inhalt der erkannten Taste in der .ini Datei eingesehen werden. Im Falle der Roomba Clean Taste, sieht das so aus:

Roomba_Clean = 26000e015a211f5b1f5a1f5b5a1e1d5d1f5b1e0002855a211c5e1c5d1c5d58211c5e1 f5a1c0002875a221c5d1c5e1b5c5b201f5a1d5d1b0002885a211c5e1c5d1c5d5a1f1f5b1e5c1b000 2875b211c5d1d5d1b5e5a1f1f5b1c5d1e0002865c1e1c5e1c5e1b5d5b1e205a1f5b1b0002885c1f1 c5e1c5d1c5d5a1f1f5b1e5b1c00028859211d5d1f5b1e5b58211f5a1f5b1e0002855b201c5e1c5d1 c5d59201f5b1e5c1d0002865a211c5d1e5c1d5c59201e5b1e5c1c00028859211c5e1e5c1b5d5a1f2 05a1f5b1e0002855c1f1c5d1f5b1c5d5a1f205a1f5a1d0002875c1e1d5d1f5b1b5e57221f5a1c5e1 f0002845b201c5e1e5b1c5d59201f5b1d5d1c0002875a211c5d1c5e1b5e5a1f1e5b1e5c1e000d050 0000000000000000000

Nun kann der Roomba über die erneute Eingabe des obigen Befehls gestartet werden und zwar durch das IR Signal der BlackBean. Prinzipiell könnte man nun in OpenHAB ein Script schreiben, welches diesen Befehl ausführt. In meinem Fall hat die Ausführung externer Scripte leider nie funktioniert - warum auch immer. Daher habe ich mir selbst noch ein "Steuerungslayer" mit PHP gebaut. Per HTTP-GET wird das zu schaltende Element an ein PHP Script übergeben, welches dann direkt per shell_exec den Schaltbefehl auf der Console ausführt:

if(strpos($nCommand,"roombaon")!==false){ shell_exec('sudo -u malte /usr/bin/python /opt/BlackBeanControl-master/BlackBeanControl.py -c Roomba_Clean'); }

In openHAB wird das Script dann per HTTP Binding aufgerufen. Die Itemdefinition sieht dann z.B. so aus:

Switch roomba "Roomba" (EGW,Schalter) "Switchable" {http=">ON:GET:http://<server_ip>/BB_... >OFF:GET:http://<server_ip>/BB..."}

Wer mit der Java Syntax von openHAB gut zurecht kommt und bei dem die Scripte aus Openhab heraus funktionieren, braucht diese Krücke vielleicht nicht... für mich ist diese Lösung OK :)

Samstag, März 25 2017

Neue Webseite

Ich habe mich einmal aufgemacht und neben dem Blog eine neue Hauptwebseite designt angepasst, welches auf einem aktuellen HTML5 Template basiert. Bald folgen wieder ein paar Infos zum Vpin Projekt...

Bis dahin, Gruss Malte

Dienstag, Juni 21 2016

Virtual Pinball Cabinet - Part1

ScSt.png

Nachdem ich mir einige Inspirationen im Netz bei diversen Tutorials, Youtube Videos und Baublogs geholt hatte, konnte es eigentlich losgehen. Den Startschuss gab dann ein Angebot beim Mediamarkt aufgrund dessen ich mir einen neuen Fernseher zulegte und den altendamit quasi übrig hatte. Dieser 40" Fernseher sollte also nun mein Spielfeldmonitor werden. Gesagt, getan, doch zunächst musste der PC eingerichtet und die entsprechende Software installiert werden.

Doch das ist gar nicht so einfach zu durchblicken, denn es gibt diverse Flippersoftware bzw. Emulatoren, die allesamt verschieden konfiguriert und installiert werden müssen und z.T. auch noch aufeinander aufbauen. Für einen ersten Test nutzte ich die Software Future Pinball. Diese ist recht einfach zu installieren und bedarf so gut wie keiner Konfiguration, die Plug n Play Variante eben. Der größte Nachteil dabei ist jedoch, dass bei Future Pinball meist nicht die originalen ROMs, sprich die Software zum Tragen kommt, die in einem echten Flipper bestimmen, was bei welcher Aktion auf dem Spielfeld passiert (Punkte, Multiplikator, Bonus, Lampen etc.). Um diese echte Software zu nutzen, benötigt man eine andere Simulationssoftware: Visual Pinball (VP) und PinMAME. Visual Pinball simuliert dabei den gesamten Flippertisch, mit Kugel und allen Tischelementen wie Zielen, Bumpern, Slingshots usw.. PinMAME gibt sämtliche Aktionen von VP an das ROM, quasi die Intelligenz des Tisches weiter und berechnet Punkte, Aktionen, speichert Betriebsdaten, Highscores usw.. Dadurch, dass die originalen ROMs, also die original Software der echten Flipper verwendet wird, verhalten sich die virtuellen Tische 1:1 genau (zumindest softwareseitig) wie ihre physischen Vorbilder.


Dem jedoch noch nicht genug. Um das ganze noch komplizierter zu machen, gibt es noch weitere Software, die neben Visual Pinball bzw. aus VP heraus gestartet wird (bzw. werden kann) und weitere Funktionalitäten bereitstellt; der so genannte Backglass Server. Dieser hat unter anderem die Aufgabe animierte Hintergründe des jeweiligen Flippers anzuzeigen. Neben der bloßen Anzeige von Hintergrundbildern, kann der Backglass Server auch noch weitere Plugins ausführen wie z.B. das DirectOutputFramework (DOF), welches für die Ansteuerung von Lampen/LEDs, Motoren, Spulen (Solenoids) oder Schützen etc. verwendet wird. So können dann z.B. Spulen aktiviert werden, wenn die Kugel auf einen Bumper, Slingshot oder ähnliches trifft um den Realitätsgrad zu erhöhen und physisches Feedback zu den Aktionen auf dem virtuellen Tisch zu bekommen.


Neben Future Pinball und Visual Pinball gibt es z.B. noch PinballFX2, welches über Steam bezogen werden kann. Dies stellt noch einige nette weitere Tische zur Verfügung und bedarf keiner weiteren komplizierten Konfiguration.


Damit nun nicht immer jeder Tisch kompliziert über die jeweilige Software gestartet werden muss, gibt es zwei Softwarealternativen, die eine einfach Tischauswahl auch über die unterschiedlichen Plattformen ermöglichen - PinballX und Hyperpin.

Da das ganze, wie schon angedeutet nicht ganz trivial ist, verweise ich für detaillierte Anleitungen hier mal auf die entsprechenden Tutorials bzw. Foren.




Softwareübersicht

-Pinball X / Hyperpin (starten)
    -Future Pinball
    -PinballFX2
    -Visual Pinball  - PinMAME
         -Backglass Server (B2S)
              -Direct Output Framework


Links:

http://www.pinballx.com/

http://www.hyperspin-fe.com/

http://www.futurepinball.com/

http://store.steampowered.com/app/226980/?l=german

http://www.vpforums.org/

https://directoutput.github.io/DirectOutput/

Donnerstag, Dezember 3 2015

P2V - partitionsweise Überführung in eine VM

Eine vorhandene Linuxmaschine in eine virtuelle Maschine zu überführen ist einfach. Einfach eine Kopie mit einem P2V Tool anlegen und fertig! Problem nur, wenn man keine kompletten Festplatten klonen möchte und keine 200GB an freiem Speicher in das Diskimage schreiben möchte. Das Ausgangssystem war ein Debian 8 das ca. 6GB Festplattenspeicher auf einer 250GB Platte belegte. Um das resultierende Image zu verkleinern verkleinerte ich zunächst die EXT4 Root Partiton mit gparted Live auf angenehme 16GB. Mit

dd if=/dev/sda1 of=hdd_raw.img

konnte ich das Rohabbild der Partion schon einmal klonen. Da zur Überführung in ein durch Virtualbox nutzbares VDI Format natürlich auch ein MasterBootRecord und eine Partitionstabelle im Plattenabbild vorhanden sein müssen, kann man das oben erzeugte Abbild erst einmal nicht nutzen. Um dieses Problem zu lösen habe ich zunächst mit dd eine leere Datei in Größe meiner neuen virtuellen Festplatte erzeugt, diese muss natürlich mindestens genau so viel Speicher haben wie das Partitionsimage (in diesem Fall 16GB). Um noch Platz für eine Swap Partition zu haben, erzeuge ich das Image mit 20 GB:

dd if=/dev/zero of=neue_platte.img bs=1G count=19

Da fdisk auf Dateibasis arbeitet, kann mit

fdisk neue_platte.img

die Datei partitioniert werden. Hierzu lege ich eine 16GB große Primärpartition an und zudem eine Extended Partition, welche die Swap-Partion wird. fdisk bemerkt beim Start schon, dass keine Partitionstabelle existiert und legt automatisch eine neue an. Wichtig ist zudem noch, dass die neue Partition das Bootable Flag bekommt. Am Ende das ganze noch speichern und wir haben ein Image mit (leeren) Partitionen. Mit dem Tool kpartx können nun die einzelnen Partitionen im Image File als Loopback Device im System eingebunden werden. Hierzu werden root Rechte benötigt:

sudo kpartx -a neue_platte.img

Da wir in unserem Image 2 Partitionen haben, legt kpartx auch 2 Loopback Devices an. Diese liegen unter /dev/mapper/loop0pX. In diesem Fall soll nur die erste Partition überschrieben werden, also kann das gedumpte Image (hdd_raw.img) einfach auf das Device loop0p1 kopiert werden.

sudo cp hdd_raw.img /dev/mapper/loop0p1

Jetzt kann mittels resize2fs noch das Dateisystem repariert bzw. auf den verbleibenden Speicherplatz vergrößert werden: sudo resize2fs /dev/mapper/loop0p1 . Ist dieser Prozess sauber durchgelaufen, können die Partionen wieder aus dem System entfernt werden:

sudo kpartx -d neue_platte.img

und das Loopback Device wieder freigegeben werden (sudo losetup -D). Jetzt liegt ein sauberes Plattenimage inklusive Partitionstabelle und MBR vor, welches nun für den Betrieb in einer VM vorbereitet werden kann:

VBoxManage convertdd neue_platte.img vm_festplatte.vdi --format VDI

In meinem Fall hatte ich noch das Problem, dass scheinbar der Bootloader nicht mehr korrekt funktionierte und die VM nicht bootete. Dies konnte ich allerdings schnell mit einer Reparatur mit der Boot Repair Disk beheben (klick). Ein weiterer Fallstrick war, dass sich die UUID der Swap Partition verändert hatte (logisch, denn die wurde ja nicht geklont) und Debian diese in der VM nicht mehr finden konnte. Die Änderung der UUID der Swap Partition in der /etc/fstab brachte jedoch schnell Abhilfe und das System läuft nun sauber und ohne Probleme.

Dienstag, Juni 16 2015

Raspberry Pi Photobooth

Kathrin_und_Maltes_Hochzeit_363.jpg

Im Rahmen meiner anstehenden Hochzeit suchte ich nach günstigen, zunächst mietbaren, Photobooth Boxen. Diverese Hochzeitsfotografen bieten diese Boxen an, jedoch für einen relativ hohen Preis. Dafür bekommt man jedoch hochqualitative Fotos, denn häufig beinhalten die Boxen teure Spiegelreflexkameras, teure Software und/oder eingebaute Fotodrucker.
Da mir dies jedoch alles zu teuer war, suchte ich nach DIY Alternativen und stieß relativ schnell auf die Seite von Chris Evans (KLICK). Er hatte auf Basis des Raspberry Pi, Raspbian und einem kleinen Pythonprogramm eine wirklich schlanke und einfache Photobooth Lösung gebaut, die meiner Vorstellung einer solchen Box schon recht nah kam. Einen Raspberry hatte ich noch in der Schublade, es fehlte nur noch das Raspberry Kameramodul. Diesbezüglich war ich mir zunächst nicht ganz sicher, denn ich hatte gelesen, dass die Kamera insbesondere bei wenig Licht sehr stark rauschen würde und die Qualität auch nicht wirklich toll sein sollte. Meiner Ansicht nach, ist die Qualität der Fotos jedoch nicht das einzige bzw. ausschlaggebende Argument, welches es bei einer Box zu beachten gibt.
Ich bin der Ansicht, dass das Hauptaugenmerk auf dem Spass und witzigen Fotos liegen sollte, statt auf perfekt ausgeleuchteten, rauscharmen Fotos mit höchster Pixelzahl. Also bestellte ich die Kamera und ich muss sagen, die Qualität ist völlig in Ordnung! Natürlich kann man keine Wunder erwarten, aber für ein paar Fotos bei normalem Licht reicht die Kamera vollkommen aus und wichtiger noch: Sie ist schnell und einfach programmier- und bedienbar!

1. Modifikationen gegenüber der Originalbox im Überblick
1.1 Email und Tumblr Upload deaktiviert
1.2 Wasserzeichen im Bild
1.3 Countdown Overlay im Livebild
1.4 4-Fachdarstellung der geschossenen Bilder (Speicherung aller Einzelbilder und der 4er-Bilder)
1.5 Standby-Replay Modus (wenn keine Fotos gemacht wird, werden nach Zufallsprinzip gemachte Bilder gezeigt)
1.6 RGB LED Beleuchtung
1.7 Mini Webgallerie auf lokalem Webserver, erreichbar über
1.8 WiFi Accesspoint (WLAN Modul)
1.9 Shutdown/Reset Prevention Routine (System Shutdown/Reboot nur über Button-Longpress aktivierbar)
1.10 Externer Buzzer
1.11 Beleuchtete Auslöseschalter
1.12 Speicherung der Fotos auf USB Stick statt SD Karte



1.1 Email und Tumblr Upload deaktiviert
Anders als bei Chris, wollte ich die Bilder nicht zu Tumblr oder irgendeiner anderen Bildplattform hochladen und so konnte der gesamte Teil in meiner neuen Fotobox Software entfallen. Zudem wollte ich den Raspberry auch nicht mit mobilem Internetzugang auststatten.

1.2 Wasserzeichen im Bild
Um den Bildern einen professionellen Touch zu geben, soll ein kleines Wasserzeichen bzw. Logo in der unteren linken Ecke der Bilder angezeigt werden. Um den Rechenprozess beim Erstellen der 4-fach Ansicht zu beschleunigen, werden die Fotos direkt nach der Aufnahme und während des Countdowns im Hintergrund mit dem Logo versehen. Dies geschieht mittels eines System-Call des ImageMagick Programms montage:

    graphicsmagick = "composite -gravity southwest /home/pi/watermark3.png " + filename + " " + filename + "&"
    os.system(graphicsmagick)


Wichtig ist hierbei besonders das "&" Symbol am Ende, welches die Hintergrundausführung des composite Kommandos ermöglicht, also während bereits neue Fotos gemacht werden.



1.3 Countdown Overlay im Livebild
Anders als in der originalen Version der Box wollte ich noch einen Countdown, der als Overlay über das Live-Kamerabild gelegt wird, sodass die Nutzer auch sehen können, wann das Foto geschossen wird. Da im Originalcode sowieso eine kurze Pause zwischen den einzelnen Aufnahmen liegt, musste nur noch ein Bild zur richtigen Zeit ein- und ausgeblendet werden. Hierzu erstellte ich einige Grafiken, die dann halbtransparent über das Kamera-Livebild gelegt werden. Als ich diesen Teil programmierte enthielt die picamera Bibliothek (1.8) noch einen Bug, der ein Memory Leak durch mehrfaches Hinzufügen und Entfernen von Overlays produzierte (Fixed a nasty memory leak in overlay renderers which caused the camera to run out of memory when overlays were repeatedly created and destroyed (#174)). Glücklicherweise wurde dieser mit Veröffentlichung der neuen Version behoben.

def countdown_overlay( camera ):
    n=4
    for i  in range(1,n):
	gc.collect()
    	img = Image.open(str(i)+'.png')
    	pad = Image.new('RGB', (
        	((img.size[0] + 31) // 32) * 32,
        	((img.size[1] + 15) // 16) * 16,
        	))
    	pad.paste(img, (0, 0))
	o = camera.add_overlay(pad.tostring(), size=img.size)
	o.alpha = 100 #128
    	o.layer = 3
	sleep(1)
	camera.remove_overlay(o)
   	del img
   	del pad



1.4 4-Fachdarstellung der geschossenen Bilder (Speicherung aller Einzelbilder und der 4er-Bilder)
Um den gesamten Fotoprozess zu beschleunigen und so mehreren Leuten die Möglichkeit zum Fotografieren zu geben, entschied ich mich, anders als bei Chris die Bilder nicht einzeln sondern alle 4 Bilder gleichzeitig nach der Session auf dem Bildschirm darzustellen. Auch hier kommt wieder Imagemagick ins Spiel und kombiniert die 4 Einzelbilder zu einem:

    #Aus den 4 Einzelbildern 1 Bild montieren
    graphicsmagick = "montage "+ file_path + now + "-01.jpg " + file_path + now + "-02.jpg " + file_path + now + "-03.jpg " + file_path + now + "-04.jpg -geometry 640x512+2+2 "+ file_path + now + "-montage.jpg "
    os.system(graphicsmagick)
    #Kopieren der Einzelbilder nach ./single und in Anschluss löschen
    bilder_wech="cp "+ file_path + now + "-01.jpg " + file_path + now + "-02.jpg " + file_path + now + "-03.jpg " + file_path + now + "-04.jpg "+ file_path + "single/"
    os.system(bilder_wech)
    bilder_wech="rm -f "+ file_path + now + "-01.jpg " + file_path + now + "-02.jpg " + file_path + now + "-03.jpg " + file_path + now + "-04.jpg " 
    os.system(bilder_wech)

8.JPG

1.5 Standby-Replay Modus
Um den Bildschirm optimal auszunutzen sollen während der Fotopausen, d.h. wenn gerade keine Bilder gemacht werden, nach dem Zufallsprinzip Bilder angezeigt werden. Hierzu wird bei jedem Aufruf der Funktion das Bildverzeichnis eingelesen und dann aus dieser Menge fortlaufend zufällig Bilder ausgewählt und angezeigt, bis ein Benutzer den Auslöseknopf drückt. So können sich Benutzer einfach bereits gemachte Bilder anschauen und sich weitere Ideen für neue Fotos holen.

while not GPIO.event_detected(button1_pin) :
		piclist = list()
		x = 0
		for infile in glob.glob(os.path.join(file_path,'*.jpg')):
			piclist.append(infile)
		print random.choice(piclist)
		pygame.display.set_caption('Photo Booth Pics')
		pygame.mouse.set_visible(False) #hide the mouse cursor
		filename = random.choice(piclist)
		del piclist
		img=pygame.image.load(filename)
		img = pygame.transform.scale(img,(transform_x,transfrom_y))
		screen.blit(img,(offset_x,offset_y))
		pygame.display.flip() # update the display
		sleep(3)
		#print "next pic..."
		gc.collect()	

	pygame.quit()
	print "killed random image process"
	GPIO.remove_event_detect(button1_pin)
	start_again = True
	GPIO.output(led2_pin,False)



1.6 RGB LED Beleuchtung
Eine schöne optische Verbesserung mit positivem Nebeneffekt bietet der (die) RGB-LED Strip. Zum einen macht die Beleuchtung natürlich einen tollen Eindruck und unterstützt gleichzeitig in den Abendstunden oder bei schlechten Lichtverhältnissen beim Fotografieren. Fernbedienung und IR Empfänger sind seitlich in der Wartungsklappe untergebracht, was einen schnellen Farbwechsel oder eine Anpassung der Helligkeit ermöglicht. Um noch mehr Lichtleistung in den schmalen Schlitz zu bekommen, entschied ich mich 2 LED Streifen einzubauen. Einen, der nach oben strahlt und auf eine weiße und somit reflektierende Fläche trifft und einen anderen, der direkt nach vorne strahlt. Durch das auf der Rückseite aufgerauhte Plexiglas wird die Scheibe diffus und matt und bietet so ein recht gleichmäßiges relativ blendfreies Licht.

4.JPG

9.JPG




1.7 Mini Webgallerie auf lokalem Webserver
Um den Gästen die Möglichkeit zu geben sich die Bilder mit dem Smartphone oder Tablet anzusehen, benötigte ich neben einem Webserver eine Galleriesoftware, die möglichst wenig Ressourcen benötigt und möglichst ohne große Konfiguration und zusätzliche Bibliotheken oder Datenbanken auskommt. Nach einiger Suche stieß ich auf MiniGal (http://www.minigal.dk/) Perfekt! Nachdem der Server und die Gallerie aufgesetzt waren, stellte ich jedoch ein Problem fest welches mich davon abbrachte, diese Konfiguration produktiv einzusetzen: Die Generierung der Vorschaubilder in der Gallerie geschieht scheinbar ebenfalls mit Imagemagick - Eigentlich kein Problem, doch bei einer Vorschau von 8 Bildern, wurden ebenfalls auch 8 Prozesse gestartet, die die kleine CPU des Raspberry für kurze Zeit vollständig auslasteten. Da gerade bei vielen gleichzeitigen Zugriffen auf den Webserver die Lauffähigkeit des Photobooth Programms nicht sichergestellt werden kann, entschied ich mich dieses Feature zu deaktivieren.

1.8 WiFi Accesspoint
Eigentlich der Tatsache geschuldet, dass der Ethernetanschluss des Pi nur schlecht zu erreichen ist richtete ich einen WLAN Accesspoint, DHCP und DNS Server auf dem Raspberry ein. So ist eine schnelle und unkomplizierte Wartung per WLAN und Laptop, Handy oder Tablet möglich. Leider läuft der Accesspoint nicht wirklich stabil und ich habe häufiger Probleme mich mit dem WLAN zu verbinden. Nach ein paar Neustarts ist das Problem jedoch meist behoben. Ursache könnte der verwendete Stick oder aber ein Softwareproblem sein. Da der Zugriff aber i.d.R. nur bei Problemen oder Wartungen von Nöten ist, ist dies kein Problem.

1.9 Shutdown/Reset Prevention Routine
Nach einigen Stunden des Testens, stellte ich immer wieder fest, dass die Hardwarebuttons scheinbar ohne ersichtlichen Grund von Zeit zu Zeit schließen bzw. auslösen. Beim Auslösebutton ist dies zwar nicht besonders schlimm (man hat eben nur ein leeres Foto), bei den Knöpfen für Shutdown oder Reboot liegt das Problem jedoch auf der Hand. Leider konnte ich nicht wirklich herausfinden, was der Grund für das ungewollte auslösen der Buttons ist. In Supportforen habe ich Leute mit einem ähnlichen Problem, aber ohne eine vernünftige Lösung gefunden. Um nun also dieses ungewollte Drücken zu unterbinden, habe ich eine kleine Routine programmiert, die den Shutdown oder Reboot Befehl erst dann durchführt, wenn der Button längere Zeit gedrückt wird. Diese Lösung ist allerdings programmiertechnisch nicht sauber und eher experimentell, aber sie funktioniert (irgendwie… ;-) ).

def reset_event_detection_shutdown():
	sleep(0.5)
	GPIO.remove_event_detect(button2_pin)
	sleep(0.1)
	GPIO.add_event_detect(button2_pin, GPIO.FALLING, callback=shut_it_down, bouncetime=300) 

def shut_it_down(channel):
	sleep(0.5)
	counter=0
	while GPIO.input(channel) == GPIO.LOW :
		counter=counter+1
		sleep(0.1)
	     
	if (counter >= 8): 
		print str(counter) + "counter"
		print "Shutting down..." 
		GPIO.remove_event_detect(button2_pin)
		lightshow(1)
		#GPIO.output(led1_pin,True);
		#GPIO.output(led2_pin,True);
		#GPIO.output(led3_pin,True);
		#GPIO.output(led4_pin,True);
		time.sleep(3)
		os.system("sudo shutdown now -h")
    	
	else:
		print "Press longer to shutdown!"
		print str(counter) + "counter"
		reset_event_detection_shutdown()


3.JPG

1.10 Externer Buzzer
Neben dem Auslöser an der Box wollte ich gerne noch eine Möglichkeit eines stehenden Buzzers realisieren, der etwas von der Box entfernt stehen sollte. Da ich beabsichtigt hatte den Buzzer später auch zu beleuchten, brauchte ich also eine 4-adriges Kabel und eine Möglichkeit ihn einfach von der Box an und abzukoppeln. Hier entschied ich mich auf ein USB Kabel zurückzugreifen, was sich m.E. hierfür prima eignet.
6.JPG

1.11 Beleuchtete Auslöseschalter
Um die Gäste zu animieren und das Aussehen optisch zu verbessern entschied ich mich die Buttons noch zu beleuchten. Standardmäßig sind die Arcardebuttons mit 12V Glühbirnchen versehen, was eine (An-)Steuerung mittels Raspberry und GPIO erschwerte, da dieser nur 5V liefert. Also entschloss ich mich die Beleuchtung komplett autonom zu steuern und verpasste dem Lampensystem ein eigenes 12V Netzteil welches ich mit einem Wechselblinker (Bausatz) koppelte. Sofern der Buzzer angeschlossen ist, blinkt der Auslöser am Gehäuse und der Buzzer im Wechsel, ansonsten ist die Lampe dauerhaft beleuchtet.



1.12 Speicherung der Fotos auf USB Stick statt SD Karte
Um zum einen Schreibzugriffe auf die SD Karte zu minimieren und das Kopieren der Fotos zu vereinfachen, habe ich einen USB Stick installiert, welcher beim Systemstart automatisch gemountet wird. Dieser ist FAT32 formatiert und kann also auch problemlos von Fremdbetriebsystemen wie MacOS oder Windows gelesen werden. Der Stick kann beim Systemstart mit folgendem Eintrag in der /etc/fstab automatisch gemundet werden:
UUID=<UUID des USBSTICK> /var/www/photos vfat defaults,auto,umask=022,users,rw 0
Die UUID kann mit dem Befehl blkid festgestellt werden.

Ich begann zunächst mit der Installation und Einrichtung des Raspbian Systems und begann dann mit dem Auf- und Nachbau der Elektronik auf einem Breadboard. Erste Tests funktionierten gut und so konnte ich mich dem Code widmen. Da ich nur wenig Erfahrung mit der Programmierung mit Python habe, war die Programmierung etwas holperig. Glücklicherweise findet sich überall gute Dokumentation im Netz und ich brauchte nicht viel neu zu programmieren und konnte so weite Teile von Chris‘ Code einfach recyclen.
Glücklicherweise verfügt mein verwendeter Monitor über eingebaute USB Schnittstellen, weswegen ein externes Netzteil für den Raspberry enfällt. Intern verwende ich eine 3fach Steckdose die mit Monitor, Lampennetzteil und LED Netzteil voll belegt ist. Durch die interne Verwendung der 3er Dose hat die Box nur ein Stromkabel welches nach aussen geht.
2.JPG 1.JPG



Probleme

  • Fehlendes Internet, daher keine Zeitsynchronisation --> keine bzw. falsche Zeitstempel bei Fotos
  • Aufgrund (vermutlich) langer Kabel willkürliches ungewolltes Drücken der Buttons (siehe 1.9)
  • WLAN Verbindungsprobleme (Verbindung mit Photobooth schlägt fehl)



Ideen für zukünftige Verbesserungen

  • Mobiles Internet mit DynDNS Adresse für Wartungszwecke
  • Ethernet Wartungsanschluss
  • Sound (Auslösegeräusch, Countdown Ton)

5.JPG

7.JPG

Der komplette Code: photobooth.py

Umzug zu dotclear

Aufgrund meines begrenzten PHP Speichers von nur rund 16MB und den sich häufenden "Memory Exhausted" Fehlern insbesondere im Backend von Wordpress, habe ich den Blog nun auf die Software dotclear migriert. Glücklicherweise bietet die einen Wordpress Import Assistenten, sodass auch die alten Beiträge alle wieder da sind (wenn auch ohne Absätze).

Viel Spass!

Freitag, Juli 11 2014

Quadcopter UDI 818a

Nachdem der UDI 818a Quadcopter nun schon einige Zeit besitze, möchte ich kurz meine Erfahrungen dazu teilen. Zunächst mal tut der UDI 818a eigentlich alles was er soll, nämlich fliegen. Bezüglich der Steuerung lässt sich sagen,dass er mir im Modus 1 (Anfängermodus) viel zu träge reagiert und die wenigen ersten Abstürze auf das Konto diesesModus 1 gehen. Nachdem ich dann nur noch den Modus 2 (ohne Limitierung) genutzt habe klappte auch der Flug immer besser. Einziges Manko: der Akku. Dieser ist nämlich innerhalb weniger Minuten leer und auch nach mehrmaligem Aufladen der Akkus(ich habe direkt noch ein 3er Set bestellt) wurde dieses Verhalten auch nicht besser. Meine Vermutung ist hier, dassder mitgelieferte Lader, nicht nach einem Ladeprogramm (wie bei LiPo Akkus eigentlich nötig) arbeitet, sondern einfach eine Abschaltung des Ladestroms bei 4,2 Volt vornimmt. Aufgrund dieser Vermutung und der fehlenden Möglichkeit mehrere Akkusgleichzeitig zu laden, entschied ich mich für den Kauf eines ordentlichen Ladegeräts (Jamara X-Peak 80). Damit scheint die Flugzeit doch noch einmal etwas zu steigen und man hat einfach ein besseres Gefühl beim Laden. Doch auch der Tausch des Laders konnte die Tatsache der kurzen Flugzeit nicht wett machen und so entschloss ich mich für eine Modifikation. Besser gesagt, ich entfernte die Plastikschutzverkleidung. Diese eigentlich nur kleine Änderungmachte sich extrem in der Agilität und auch in der Akkulaufzeit bemerkbar. Der Quadcopter war nun deutlich besser zukontrollieren und auch das berühmte "Parken in der Luft" klappte nun einwandfrei. Auch leichter Wind war so kein Problem mehr. Lediglich ab und zu schien es eine Störung des Gyroskops zu geben und der Copter trudelte einfach langsam zu Boden, setzte kurz auf und flog dann wieder hoch. Insbesonderen nach den 360° Drehungen. Abgesehen von diesen Kleinigkeiten ansonsten alles in allem eigentlich soweit ganz gut. Ich habe einige schöne Flüge gemacht und auch einige nette Aufnahmen mit der integrierten Kamera gefilmt, die nun wirklich keine tolle Qualität hat, für ein paar kleine Videos aus der Höhe aber vollkommen ausreicht. Problematisch wurde die Fliegerei allerdings, als der Copter plötzlich und unverhofft Probleme mit dem Rückwärtsflug bekam.Er ließ sich nur noch schwer und mit viel manuellem Nachtrimmen wieder zurück fliegen und ladete aufgrund dieser Tatsache auchschonmal frontal vor einer Wand. Als nun auch noch die Akkuleistung rapide abnahm, ging ich zuerst von defekten Akkus aus. Wie ich nach einigen Tests herausfinden musste, war scheinbar einer der kleinen Motoren defekt und zog so viel Strom, dass die Akkus nach knapp 1 Minute komplett leer waren. Nachdem ich einen neuen Ausleger inklusive Motor bestellt und montiert hatte, schien wieder alles im Lot zu sein, das war es leider aber nicht - der Copter ließ sich zunächst prima steuern, kippte dann aber während des Flugs unverhofft nach vorne und entfernte sich so schnell, dass mir nur noch das prompte Abschalten der Motoren weiterhalf und der Copter aus gut 30-40 Metern auf den Asphalt stürtzte. Glücklicherweise wurde keine Person verletzt und nichts beschädigt, dennoch ein Schockmoment. Der Copter hat, abgesehen von einem umgeknickten Propeller den Sturz unbeschadetüberstanden, dennoch scheint ja offensichtlich auch ein weiterer Motor defekt zu sein... Mittlerweile überlege ich tatsächlich, ob ich überhaupt noch Geld in den Flieger investieren soll. Wenn man überlegt welcheSumme ich mittlerweile für Akkus, Lader und Ersatzteile berappt habe, würde ich direkt zu einem teureren/besseren Modell raten. Auch wenn die Qualität eigentlich ganz in Ordnung ist. Was jedoch ein wenig ärgert ist, dass z.B. der Vorgang der Gyroskopkalibrierung mit keiner Silbe im beigelegten Manual erläutertwird! Daher kurz zur Info: Nach dem Binden des Copters an die Fernbedienung sofort den rechten Steuerhebel erst nach hinten und dann sofortnach unten rechts ziehen (quasi eine L-Form). Daraufhin blinken die Beleuchtungsleds und das Gyroskop ist kalibriert. Fazit: Das UDI 818a ist ein guter und günstiger Copter für Leute, die sich (wie ich) neu mit diesem Hobby beschäftigen. Man findet sich schnell mit der Steuerung zurecht und bekommt ein gutes Gefühl, wie sich solche Fluggeräte verhalten. Die verbaute Kamera istein nettes Feature, die Qualität der Videos ist allerdings nicht wirklich toll, von den Fotos ganz zu schweigen!Besser scheint mir lieber einmal mehr Geld in die Hand zu nehmen und einen ordentlichen Copter, wie z.B. den DJI Phantom zu kaufen,der sicherlich auch für Anfänger gut zu steuern ist, aber deutlich hochwertiger und mit nützlichen Features wie Return Home und Altitude Lockausgestattet ist. Wer billig kauft, kauft 2x ...

Dienstag, Juli 30 2013

Fazit iRobot Roomba 780

iRobot Roomba 780 Staubsaugroboter - Ein Zwischenfazit Nachdem ich den Roomba nun schon einige Zeit besitze, möchte ich doch nochmal kurz resümieren. Anfangs war ich doch etwas skeptisch als er regelmäßig vor Schränke, Tische und Stühle "donnerte" und auf diese Weise selbstständig durch den Raum navigierte. Keines der Möbel hat bisher dadurch irgendeinen Schaden oder auch nur ein Macke davongetragen und ich gehe davon aus, dass auch keiner mehr auftritt. Zugegeben irgendwie hatte ich etwas mehr Intelligenz erwartet aber trotzdem erstaunten mich diverse Dinge, wie das präzise parallele Abfahren von Kanten und Wänden und die automatische Erkennung von Tischbeinen und runden Objekten. Zunächst aber zur   Reinigungsleistung Mittlerweile möchte ich "Robi" nicht mehr missen, denn bei seinen Fahrten durch die Wohnung sammelt er solch enorme Mengen an Staub auf, dass man glauben könnte es würde nie gereinigt und man sich wirklich fragt, wo lag dieser ganze Staub. Alleine diese Tatsache qualifiziert ihn in meinen Augen schon als vernünftiges Haushaltsgerät. Wenn man dann noch in Betracht zieht, dass er auch an Stellen reinigen kann, die mit dem normalen Staubsauger nur schwer oder gar nicht zu erreichen sind (z.B. unter dem Bett) wird der Mehrwert deutlich. Der Roomba ersetzt sicherlich keinen herkömmlichen Staubsauger, erspart aber in jedem Fall das ständige Staubsaugen und reduziert die Anzahl der normalen Saugvorgänge auf ein Minimum. Eigentlich muss nur in Ecken oder an Übergängen oder überstehenden Kanten, die der Roomba nicht erreichen kann, ab und an nachgesaugt werden. Die Reinigungsleistung ist in Summe wirklich einwandfrei und alle (von ihm erreichbaren) Stellen sind sauber. Lediglich um die Dockingstation und um Lighthouses herum wird (aus technischen Gründen?) nicht gesaugt.   Reinigung des Roboters Ich reinige den Roomba eigentlich wöchtentlich, jeweils mit dem dem leeren des Staubbehälters. Die Reinigung ist schnell und einfach erledigt und auch die mitgelieferten Werkzeuge erweisen sich als n¸tzlich. Ich nehme zusätzlich noch immer eine kleine Nagelschere um die eingedrehten Haare an den Rändern der Bürsten zu entfernen. Die Gummib¸ste lässt sich auch problemlos unter warmem Wasser abspülen, für den Rest eignet sich ein feuchter Lappen. Als sehr nützlich hat sich für mich der Einsatz von Druckluft (Luftsprühdose, Kompressor oder Luftpumpe) herausgestellt, da sich doch überall in Ritzen und Öffnungen noch Staub festsetzt der so schnell und einfach entfernt werden kann.   Navigation, Multiroom-Cleaning und Docking Ein kleines Manko und eigentlich das einzig Negative ist die Navigation oder zumindest Teile davon. Während der Roomba in manchen Situationen scheinbar intelligent handelt (z.B. Reduktion der Geschwindigkeit vor Hindernissen), knallt er nur wenige Augenblicke später mit voller Fahrt von genau dieses Hindernis, welches er vorher erkannte. Dies hat natürlich keine Auswirkung auf die Reinigung, lässt aber schon an der Programmierung zweifeln. Weiterhin scheint der Roomba manchmal starke Orientierungsschwierigkeiten zu haben und versucht fröhlich mehrfach durch ein offensichtliches Hindernis zu fahren. Besonders im Zusammenhang mit Lighthouses gibts offenbar auch einige Probleme, was sich durch mehrfaches Drehen um die eigene Achse äussert, als versuche der Roboter Dock oder Lighthouse zu orten. Dies hat zwar keinerlei Auswirkung auf Reinigung o.ä., macht aber einen komischen Eindruck. Weiterhin erscheint mir manchmal der Wechsel in einen anderen Raum sehr holperig. Obwohl er offensichtlich komplett gereinigt ist, überfährt der Roomba die virtuelle Schranke erst sehr spät. Dieses Phänomen tritt ab und an auch bei der Rückkehr zum Dock nach der Reinigung auf. Die Schranke wird nicht überfahren, obwohl der aktuelle Raum zum einen bereits gereinigt ist und zu anderen nur noch der Rückweg zu meistern wäre... Vielleicht liegt das aber auch an meiner Lighthouse Positionierung? Ansonsten funktioniert die Mehrraumreinigung aber gut und zuverlässig. Zu beachten ist nur, dass eine gewisse Roboterfreundlichkeit der Räume gewährleistet ist, denn ansonsten kann es vorkommen dass der Roboter sich fest fährt oder auch selbst einsperrt und bis zum Akkuende vergeblich versucht zu entkommen. Heizungen, Hänge WCs oder auch Vorhänge sind da sehr gefährlich ;). Wie auch bei allem anderen treten neben dem an sich sehr akuraten Dockingvorgang ab und an kleinere Probleme beim Befahren des Docks auf, wobei der Roboter das Dock auch schonmal selbsttätig verschiebt. Dies könnte in meinem Fall aber auch an der recht unoptimalen Position des Docks in einer Ecke liegen.   Fazit Alles in allem war und ist der Roomba 780 eine absolut empfehlenswerte Anschaffung insbesondere für Menschen mit hohem Sauberkeitsbedürfnis und staubfangenden Hartböden wie Laminat, Fliesen oder ähnliches. Der hohe Preis schreckt zwar zunächst ab, stellt man dem aber die Zeitersparnis und Bequemlichkeit gegenüber relativiert sich dieser.    

Dienstag, April 16 2013

Spacewalk 1.9 Channel Clone Error

Seit dem Update auf Spacewalk 1.9 gab es beim Versuch Software Channel zu klonenen einen 500 Internal Server Error. Dieser lässt sich auf einen fehlenden Link im Dateisystem zurückführen: ln -s /var/www/html/network/software/ /usr/share/spacewalk/web/network/software Dann sollte wieder alles wie gewohnt funktionieren.

Montag, April 15 2013

[LVM] root Volume verkleinern

Um ein LVM Volume zu verkleinern muss das logische Volume zunächst unmountet werden. Da das bei einer Root Partition im laufenden Betrieb nicht möglich ist, muss eine Live CD gebootet werden. Dort im Terminal folgende Befehle eingeben: Zunächst das LVM aktivieren bzw. einlesen vgchange -a y Vor der Änderung sollte das Volume nochmal auf Fehler überprüft werden e2fsck -f /dev/<volumegroup>/<logisches_volume> Wichtig! Vor dem verkleinern des Volume auf jeden Fall zunächst das Dateisystem verkleinern, da sonst Datenverlust droht (Hier auf 20GB): resize2fs /dev/<volumegroup>/<logisches_volume> 20G Jetzt darf auch das Volume verkleinert werden (ebenfalls 20GB): lvreduce -L 20G /dev/<volumegroup>/<logisches_volume> Das Ergebnis kann jetzt mit lvs überprüft werden. Nun noch den Rechner neustarten und von der frisch verkleinerten root Partition booten.  

Donnerstag, März 7 2013

linux-generic-pae Dependency Problems

Abschließend lässt sich leider gar nicht mehr genau feststellen, was zu dem Problem führte was mich jedoch lange beschäftigte. Durch ein Update des Linuxkernels bzw. der Kernelheader trat ein dependency Problem auf, welches sich nicht durch apt-get -f install / autoremove /clean oder ähnliches beheben ließ. Bei jeder Paketinstallation und jedem Upgrade brach der Updateprozess mit dem folgenden Fehler ab:
Die folgenden Pakete haben unerfüllte Abhängigkeiten: linux-generic-pae : 
Hängt ab von: linux-image-generic-pae (= 3.2.0.37.44) soll aber nicht installiert werden
Hängt ab von: linux-headers-generic-pae (= 3.2.0.37.44) aber 3.2.0.38.46 soll installiert werden
linux-image-server : Hängt ab von: linux-image-generic-pae soll aber nicht installiert werden
Die Lösung fand ich dann nach einger Recherche hier: http://askubuntu.com/questions/251862/broken-count-error-linux-generic-pae-depends-linux-image-generic-pae-3-2 Das linux-generic-pae Paket muss zuerst mittels dpkg entfernt werden und kann dann mit apt wieder mit den korrigierten Anhängigkeiten reinstalliert werden.
sudo dpkg --remove linux-generic-pae
sudo apt-get install linux-generic-pae
 

Donnerstag, Februar 14 2013

[pfsense] Routingproblem nach Umstellung IPSec auf OpenVPN

Nachdem ich sehr lange gebraucht habe um diesen "Fehler" zu finden, hier die zugegeben sehr einfache Lösung. Vielleicht ist ja jemand in genau der gleichen Situation :). Zunächst zum Problem: Weil ein IPSec VPN bei mir einige Probleme verursachte, habe ich mich zur Umstellung des VPN auf OpenVPN entschieden. Um natürlich für den Fall der Fälle nicht alle Infos des alten IPSec VPNs zu verlieren, habe ich einfach den Phase 1 Eintrag deaktiviert und danach den OpenVPN Server gestartet. Der Tunnel baute sich ohne ein Murren auf, jedoch gab es ein Problem, es ließ sich keine einzige Adresse pingen bzw. von der Gegenseite erreichen. Die virtuellen Adressen des OpenVPN Transportnetzes waren beide pingbar, also musste auch der Tunnel stehen. Die Lösung: Nach dem Deaktivieren der IPSec Phase werden die ausgehandelten SAs noch behalten und verhindern daher das Routing von OpenVPN ins LAN. Löscht man unter Status --> IPSec --> SAD bzw. SPD die Associations. Funktioniert auch das Routing mit OpenVPN einwandfrei!  

Dienstag, November 20 2012

CPU mit Linux komplett auslasten

Eine CPU unter Linux komplett auslasten? Kein Problem! Wir veranlassen das System einfach dauerhaft Zufallszahlen auf das Nulldevice zu schreiben: cat /dev/urandom > /dev/null Damit erreicht man eine 100%ige CPU Auslastung durch den einen Prozess. Bei Mehrkern-CPUs kann dieser Befehl auch mehrfach ausgeführt werden um eine vollständige Systemauslastung zu erreichen.

Mittwoch, November 7 2012

[Miniscript] DNS zu IP

Aus einer Not heraus entstand dieses kleine Bash Script, welches eine Liste (liste.txt) von DNS Namen zu IP Adressen mittels nslookup auflöst: #!/bin/sh for i in $(cat liste.txt); do nslookup $i | awk '{ print $2 }' | sed -n '0~5p' sleep 1 done exit 0

Mittwoch, Oktober 31 2012

Veraltete SSH Keys entfernen

Möchte man einen veralteten SSH Key aus seiner known_hosts entfernen kann man sich entweder mit ssh-keygen bemühen (wie bei Ubuntu zum Beispiel vorgeschlagen), selbst in der Datei Hand anlegen oder unter Angabe der Zeile des alten Keys in der known_hosts sed mit folgenden Parametern verwenden: sed -i "5 d" .ssh/known_hosts Dieser Befehl löscht die entsprechende Zeile einfach aus der Datei ohne umständliches Aufrufen eines Editors oder Befehls. Im obigen Beispiel würde der Key in der 5. Zeile gelöscht. Da SSH den "falschen" Key stets mit Zeile angibt braucht die 5 nur durch den entsprechenden Wert ersetzt werden.

Sonntag, Oktober 9 2011

ATI Catalyst Treiber unter Ubuntu entfernen

Einige Leute werden das Problem kennen: Aus Neugier installiert man den offiziellen proprietären ATI/AMD Treiber für Linux von der Homepage und stellt danach ernüchtert fest, dass das System langsamer geworden ist und scrollen und Fenster verschieben nur sehr hakelig von statten geht. Will man nun den offiziellen Treiber wieder loswerden, stellt sich die Frage nach dem wie!?! ATI hat eine einfache übersichtliche GUI erstellt um die Module zu kompilieren und zu installieren, eine einfache Deinstallationsroutine ist allerdings nicht integriert. Wer nun den fglrx Treiber komplett entfernen möchte, manövriert in das Verzeichnis /usr/share/ati und führt dort als Root User (sudo) das Skript fglrx-uninstall.sh aus. Damit sollte der Treiber und seine Überreste nach einem Neustart ins Nirvana verschwunden sein.

Freitag, August 12 2011

Multi WAN Firewall/Router pfsense

Heute möchte ich gern über mein neustes Projekt berichten: Einem Multi WAN Router mit sehr guter Firewall namens pfsense. pfsense ist ein FreeBSD Derivat und entstand aus dem bekannten m0n0wall Projekt. Anders als m0n0wall kann pfsense aber problemlos mit mehreren WAN und LAN Verbindungen umgehen. Es passt automatisch Routen an, bietet Failover und Load Balancing und lässt sich durch zahlreiche Plugins und Addons erweitern. Besonders das Problem mit https Verbindungen, welche empfindlich auf Balancing reagieren löst pfsense mit so genannten Sticky Connections. Das bedeutet, dass Verbindungen so lange über die gleiche Route / den gleichen Router laufen, bis die Verbindung abgebaut wurde oder durch einen Timeout ungültig wird. Neben umfangreichem Traffic Shaping, QoS Konfigurationen und Firewalling bietet pfsense noch eine Reihe an automatisch produzierten RRD Graphen und Statistiken an, die dem User Auskunft über die Verbindungen geben. Das System wird komplett über die Weboberfläche konfiguriert, bietet jedoch zu Wartungszecken auch direkten Zugang via SSH. pfsense kann entweder zwischen einen bestehenden Router und das interne Netzwerk geschaltet werden, oder auch direkt PPPOE Verbindungen zum Provider aufbauen. Selbst die Intregration von WLAN Karten und die Nutzung als Accesspoint soll laut Forum gut funktionieren. Mein bisheriger Eindruck ist wirklich positiv. pfsense ersetzt den selbstkonfigurierten Router/Server und macht dabei eine gute Figur. Das Netz wirkt agiler und insgesamt zügiger, was vermutlich aber auch an der Trennung der Netze mittels VLANs liegt. pfsense arbeitet in meinen Futro S200 Thinclient, der zusätzlich mit einer Dualnetzwerkkarte ausgerüstet wurde. Wer einen günstigen und hochwertigen und komplett konfigurierbaren Router mit VPN, DNS, DHCP, SNMP uvm. sucht, sollte definitiv einen Blick auf die pfsense Software in Verbindung mit einem Thinclient werfen. [1] http://m0n0.ch/wall/ [2] http://www.pfsense.org/