Mittwoch, 21. Mai 2014

Thin Client Tuning


In der Werkstatt kann es hilfreich sein, wenn man z.B. Datenblätter schnell per Internet verfügbar hat. Bisher habe ich dazu einen betagten (BJ 1998) HP Vectra VE mit 350 MHz Pentium II Prozessor und 96 MByte RAM genutzt. SuSE Linux 7.1 lief auch recht flüssig, ist jedoch auch längst überholt. Möchte man sich jedoch umfangreichere Grafiken anschauen oder auch mal etwas mit Eagle bearbeiten, stößt man schnell an die Grenzen des Machbaren. Zudem hat die Festplatte mittlerweile einen Gräuchpegel erreicht, der auf ein nahes Ableben schließen lässt.
Mein Toshiba Laptop mit noch etwas lahmeren PII und Win XP ist auch keine Alternative mehr. Schon das für's Internet erforderliche Security Pack würde ihn gnadenlos in die Knie zwingen.

Bei Nerdbench fand ich einen Artikel über einen Thin Client von Dell, den Optiplex FX160. Mit seiner Grundausstattung entspricht er nicht mehr dem klassischen Konzept eines Thin Clients. Er ist quasi ein "Thin PC". Zudem war er für günstige 25 € erhältlich.



Ausstattung:

CPU: 
RAM: 
1 GB DDR2
Festplatte: 
512 MB Flash
Grafik: 
SiS onboard bis 256 MB
Netzwerk: 
10/100/1000 Ethernet (Broadcom)
Anschlüsse: 


6x USB 2.0, 1x DVI-D, 1x VGA, 1x seriell, 2x PS2, 1x RJ45,2x intern SATA, Audio in/out (front)

Der ca. 1 cm dicke Standsockel ist abnehmbar. Darunter verbirgt sich eine Befestigungsmöglichkeitnach VESA 100.



Zum Öffnen des Gehäuses werden auf der Rückseite 2 Kreuzschrauben entfernt und das Oberteil Richtung Front geschoben. Erst dann kann es abgehoben werden.



Der FX160 wird passiv gekühlt, also keine nervigen Lüftergeräuche.



Auf dem SATA0 Steckplatz sitzt der 512 MB Flash Speicher. Auf ihm ist eine Linux Client-Software installiert, die lediglich einen Browser öffnet, um das Netzwerk zu nutzen. Hier beginnt das Tuning.



Tuning:

Mein Ziel war, Windows 7 als Betriebssystem zu installieren, die angenehme Eigenschaft der Lautlosigkeit beizubehalten und möglichst viel Performance aus dem FX160 herauszukitzeln.

Der kleine Flash wurde deshalb gegen eine 60 GB SSD von Kingston (SSDNow V300) ausgetauscht. 
Da der SATA Anschluss orthogonal zum Motherboard ausgerichtet ist, bedurfte es zum Anschluss der SSD eines Adapterkabels mit Kombistecker. Da keine Befestigungsmöglichkeit vorhanden war, habe ich die SSD einfach lose untergebracht. Der Kabelstrang und die Enge des Gehäuses sorgen für den nötigen Halt.



Der FX160 besitzt 2 RAM Slots, die in Summe mit bis zu 4 GB bestückt werden können.



Den eingebauten 1 GB Riegel habe ich durch 2x 1 GB von Corsair ersetzt. Der 2. Speicher Slot ist schräg angebracht. Vermutlich um die Effektivität des CPU-Kühlers zu verbessern, wenn der FX160 hochkant aufgestellt wird.






Es folgte nun ein BIOS Update auf die Version A13. Mein BIOS Update Stick war hier besonders hilfreich.
Anschließend habe ich mit Hilfe eines externen CD-Laufwerks Windows 7 (32-bit) problemlos installieren können. Auch das Einspielen der Treiber verlief problemlos. Das anschließende Update von Windows erforderte jedoch einige Zeit. Fast 150 Pakete wurden heruntergeladen und installiert.
Da ich nur gelegentlich nach dem Fortschritt des Updates geschaut habe und zwischendurch öfters ein Neustart erforderlich war, zog sich die Aktion über einen kompletten Tag.


Ergebnis:

Einen ersten Überblick zur Performance liefert der Windows-Leistungsindex:
















Die SSD erreicht einen ordentlich hohen Wert. Schwächtes Glied ist der Prozessor.

Die Zeiten für den Wechsel des Betriebszustandes:


Booten:
 15 Sekunden
Shutdown:
  3 Sekunden
Start aus Standby:
  3 Sekunden
Standby:
  3 Sekunden

Abschließend hat mich noch die ungefähre Leistungsaufnahme interessiert. Dazu habe ich ein simples Verbrauchsmessgerät genutzt. Unter Berücksichtigung dass die letzte Stelle der Anzeige ungenau ist, ergeben sich folgende Leistungswerte:

Heruntergefahren bzw. Energiesparmodus


4,6 W ... 9,2 W





Hochgefahren und angemeldet


28 W ... 32 W





Ein 24x7 Standby mit einem Tarif von 26 ct/kWh kostet damit im Jahr ca. 11,40 € ... 22,80 €. Angesichts der kurzen Boot-Zeit lohnt es sich den Rechner auszuschalten und vom Netz zu trennen.

Der BIOS Update Stick

In den Tiefen meiner Schreibtischschublade fristete ein alter LG XTICK USB-Stick mit 128 MB ein jämmerliches Dasein zwischen anderen unbeachteten Kleinteilen und der permanenten Aussicht im Müll zu landen...

Doch mittlerweile hat er eine neue Aufgabe erhalten, die ihm einen dauerhaften Platz in meinem PC Werkzeugkoffer sichert.

Der BIOS Update Stick


Viele Motherboards haben Software Tools im Beipack, die ein BIOS Update unter Windows erlauben. Da bei Windows viele Dienste und Programme im Hintergrund laufen, besteht latent die Gefahr, dass diese im Fehlerfall das BIOS Update gefährden. Seit Windows 7 schätze ich diese Gefahr als gering ein, unter Windows XP hat es mich jedoch schon ein Motherboard gekostet, nachdem ein Fehler in einem Hintergrundprozess zu Blue Screen führte.

Abhilfe schafft hier ein Boot-Medium mit dem guten alten MS-DOS - oder wenn es Freeware sein soll: einem aktuelleren FreeDOS. Besonders wertvoll wird diese Möglichkeit des Updates, wenn man Linux installieren möchte, da dafür meist keine BIOS Update Tools angeboten werden.

Folgende Voraussetzungen müssen erfüllt sein:
  1. Im alten BIOS als "first boot device" USB (oder removable) einstellen.
  2. Der USB-Stick muss "bootable" sein, also über einen Bootrecord im MBR verfügen.

Ein komfortabler Weg dahin bietet Rufus von Pete Batard.
Mit diesem Programm formatiert und partioniert den USB-Stick - ACHTUNG: gespeicherte Daten gehen verloren! Es legt einen Bootrecord an und schreibt ein Minimal-Set von FreeDOS auf den Stick, wenn man es entsprechend auswählt. Möchte man ein umfangreicheres FreeDOS, dann findet man dies unter http://www.freedos.org/download/.


Anschließend waren folgende Dateien auf dem USB-Stick zu finden:


Insgesamt rund 300 kB an Daten.

In der Praxis durfte sich der Stick gleich am FX160 Thin Client bewähren (dazu später mehr). 
Das BIOS Update File habe ich ins Hauptverzeichnis des Sticks kopiert. Anschließend wurde der Rechner mit dem FreeDOS-Stick gebootet und das Update File gestartet. 
Das Update verlief ohne weitere Vorkommnisse und dem guten Gefühl, dass solche auch nicht zu erwarten waren.


Sonntag, 18. Mai 2014

Hacking Intertec Funksteckdosen

Sie hingen im Baumarkt, zu viert mit einer Fernbedienung, und haben mich mit einem Preis unter 15 € angelacht: Funksteckdosen. Schaltleistung bis 1000 W (4,35 A), eine 12 V Batterie Typ A23 für die Fernbedienung ist dabei, und der Hersteller verspricht 15 m Reichweite bei einer Frequenz von 433,92 MHz.






Und nirgendwo steht, dass man zum Fernbedienen ausschließlich die Fernbedienung nutzen darf. ;-)

1. Schritt: Bedienungsanleitung lesen

Sie gibt z.B. Auskunft über die Konfigurierbarkeit der Steckdosen. 
Auf der Rückseite der Fernbedienung befindet sich unterhalb des Batteriefachs ein 5-fach DIP-Schalter, mit dem der Systemcode eingestellt werden kann. 



Der Systemcode kann aus 32 Werten beliebig ausgewählt werden. Falls die eigenen Steckdosen auch auf die Fernbedienung des Nachbarn reagieren, kann hier durch Wahl eines anderen Codes Abhilfe geschaffen werden. 

Auf der Rückseite jeder Funksteckdose verbirgt sich hinter einer zugeschraubten Klappe ein 10-fach DIP-Schalter. Mit den Schaltern 1-5 wird wieder der (eigene) Systemcode eingestellt. Die Schalter A-E legen fest, mit welchen Tasten auf der Fernbedienung diese Steckdose gesteuert werden kann.




2. Schritt: Was wird per Funk übertragen?

Das Werkzeug der Wahl ist ein DVB-T USB-Dongle (VG0002A) von LogiLink, der mit der richtigen Software zum Spektrumanalyser wird. Mein Lieblingsprogramm ist in diesem Fall die Open Source Software SDR#.



Beim Druck auf eine Taste der Fernbedienung ist das Sendesignal schnell gefunden. Per Recording Plugin habe ich den Audio-Output aufgezeichnet, um auszuwerten, was auf der 433,92 MHz Trägerfrequenz aufmoduliert ist:



Zum Auswerten nutzte ich das Open Source Programm Audacity. Hier die Gesamtansicht eines zweimaligen Tastendrucks:



Durch Zoomen der Zeitachse werden Details erkennbar:



Es ist im Signal ein Bitstrom erkennbar. 

Beim Drücken der verschiedenen Tasten ergaben sich unterschiedliche Bitströme mit 25 bit Länge und einer Periodendauer von 25x1,25 ms. Während des Tastendrucks wird der Bitstrom ständig wiederholt, mit einer Pause von 10 ms zwischen den Sequenzen.



3. Schritt: Die Auswertung

Ich habe alle Tastendrücke aufgezeichnet, die Sequenzen ermittelt und die Ergebnisse korreliert:



Die Bits 12, 14, 16 und 18 ändern sich abhängig von den gedrückten Tasten A-D, während gleichzeitig Bit 22 abhängig davon ist, ob man die ON-Taste oder die OFF-Taste betätigt. 
Beim Ändern des Systemcodes ergaben sich Änderungen bei den Bits 2, 4, 6, 8 und 10, entsprechend den Schaltern 1-5.



Hält man eine Taste längere Zeit gedrückt ändert sich jegliche Sequenz in 



Die Funktion dieser Sequenz konnte ich nicht ermitteln. Ich vermute, dass sie eine Art "neutrales Kommando" ohne Funktion ist, um Fehlinterpretationen durch Übertragungsfehler zu minimieren.

Bei der Übermittlung des Systemcodes ist mir aufgefallen, dass die relevanten Bits als "0 = kein Signal" übertragen werden, wenn der entsprechende Schalter auf Schalterstellung 1 steht.
Ich habe daher die Zuordnung getroffen:

1-Signal = logisch 0
0-Signal = logisch 1

Das Übertragungsformat kann dann wie folgt zusammengefasst werden:



E*:  Es gibt an der Fernbedienung zwar keine E-Tasten, die Steckdosen haben am DIP-Schalter jedoch die Möglichkeit als E konfiguriert zu werden. Von der Logik her vermute ich deshalb, dass Bit 20 nicht zwangsläufig zum EIN-AUS Kommando gehört, sondern für die E-Tasten vorgesehen war.

Soweit die Theorie. Ob diese Auswertungen stimmen, musste die Praxis zeigen.


4. Schritt: Wie kann man die Übertragung nachbilden?

Als Sender benutzte ich ein Modul, dass mit der Bezeichnung XY-FST bei diversen Händlern günstig zu finden ist.


Technische Daten XY-FST:
  • Betriebsspannung: 3,5 - 12V DC
  • Reichweite: 20 - 200m (Abhängig von der Betriebsspannung)
  • Betriebsart: AM
  • Übertragungsrate: 4KB / s
  • Sendeleistung: 10mW
  • Sendefrequenz: 433Mhz
  • Abmessungen: 19 x 19mm
  • Pinbelegung: Data, VCC, Masse (von links nach rechts)





Das Modulationssignal habe ich mit einem Arduino Uno generiert. Ein Testaufbau auf einem Breadboard ist schnell erledigt.



Der zeitliche Signalaufbau der Bits ergab sich aus der Auswertung und musste im Programm nachgebildet werden:



Der dazu passende Arduino-Code:

int sigTX = 7;
int LEDpin = 13;
int aOnFrame[] =  {1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1};  // sys=11111, D, EIN
int aOffFrame[] = {1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1}; // sys=11111, D, AUS

void setup() {
  pinMode( sigTX, OUTPUT );
  pinMode( LEDpin, OUTPUT );
}

void loop() {
  sendOnFrame();  // 2 Sekunden ON
  delay( 2000 );
  sendOffFrame(); // 2 Sekunden OFF
  delay( 2000 );
}

void sendOnFrame() {
  int j = 0;
  int i = 0;
  digitalWrite( LEDpin, HIGH );
  for( j=0; j<20; j++ ){     // 10x ON Sequenz senden                     
    for( i=0; i<25; i++ ){   // 25 bit Frame erzeugen
      if( aOnFrame[i] == 1 ) { sendHighLevel(); }
      if( aOnFrame[i] == 0 ) { sendLowLevel(); }
      }
    delay( 10 );
    }
  digitalWrite( LEDpin, LOW );
}

void sendOffFrame() {
  int j = 0;
  int i = 0;
  digitalWrite( LEDpin, HIGH );
  for( j=0; j<20; j++ ){     // 10x OFF Sequenz senden
    for( i=0; i<25; i++ ){   // 25 bit Frame erzeugen
      if( aOffFrame[i] == 1 ) { sendHighLevel(); }
      if( aOffFrame[i] == 0 ) { sendLowLevel(); }
      }
    delay( 10 );
    }
  digitalWrite( LEDpin, LOW );
}

// Logisch 1 Signal generieren 
void sendHighLevel() {
  digitalWrite( sigTX, HIGH );
  delayMicroseconds( 300 );
  digitalWrite( sigTX, LOW );
  delayMicroseconds( 950 );
}

// Logisch 0 Signal generieren
void sendLowLevel() {
  digitalWrite( sigTX, HIGH );
  delayMicroseconds( 930 );
  digitalWrite( sigTX, LOW );
  delayMicroseconds( 320 );
}


4. Uuuuuuund Action!


Donnerstag, 1. Mai 2014

Reparatur Miele G646SC PLUS

Der Geschirrspüler von Miele hat schon ein paar Jahre auf dem Buckel und bisher hatte er zuverlässig gearbeitet. Dann fing er plötzlich an, während des Spülprogramms abzupumpen und nicht mehr mit dem Pumpen aufzuhören.
Eine kurze Recherche im Netz ergab den Hinweis, dass entweder Wasser austrete oder ein Schwimmerschalter defekt sei.
Also: aufmachen!

Wichtig! - Erste Maßnahme: Stecker raus!

Da das Gerät in die Küchenzeile integriert ist, musste nach dem Herausziehen nur die Seitenwand mittel 4 Schrauben entfernt werden. Eine davon versteckt sich etwas hinter der Klappendichtung.



Nach dem Zurückklappen der Isolierung, wird die Bescherung schon sichtbar: 



Tritt Wasser aus, sammelt es sich in der Bodenwanne und der Schwimmerschalter sorgt für den Start des Abpumpens.



Eine Schutzmaßnahme, damit die Küche trocken bleibt.
Aber woher kommt das Wasser?

Dann habe ich mit Schwamm und Lappen das Wasser aufgenommen. Anschließend wieder Stecker rein und das Vorspülprogramm gestartet. Nach dem Wassereinlassen und Starten des Spülvorgangs wurden Tropfen an der Umwälzpumpe sichtbar.



Die Stelle an der das Wasser austrat, war jedoch nicht zu erkennen. Die Bodenwanne musste also entfernt werden, um der Ursache genauer auf den Grund zu gehen.



Zum Ausbau der Umwälzpumpe ist an der Rückseite eine 8 mm Sechskantschraube (oranger Pfeil) und 3 Schauchklammern (rote Pfeile)  zu entfernen. 


Beim Herausziehen der Pumpe kam eine zerfetzte Dichtung zum Vorschein, die die Verbindung zwischen Spülraumablauf und Pumpe abdichten soll, dieser Aufgabe aber vermutlich nicht mehr gerecht werden konnte. 
Eine weitere Überraschung steckte im Pumpeninneren: dort hatte sich eine Scherbe verklemmt, die an der zerfetzten Dichtung bestimmt nicht ganz unschuldig war.
Auch ein Stück Kunststofffolie kam zum Vorschein, die einst mal als Etikett diente.



Nächster Schritt: eine Ersatzdichtung besorgt und eingebaut:



Anschließend wieder die Pumpe und die Wanne montiert und wieder das Vorspülprogramm gestartet.

Es hätte so schön sein können ... aber es tropfte noch immer. Also wurde nochmal die Bodenwanne entfernt und die Pumpe genauer untersucht. 
Eine weiterere Spur: ein Tropfen an der Stelle, an der die Motorwelle ins Pumpengehäuse führt.



Dort müsste auch eine Dichtung sein und wie man sieht, wurde sogar für den Fall einer Undichtigkeit ein Kanal im Gehäuse eingelassen, damit dass Wasser ablaufen kann und sich nicht Richtung Motor ausbreitet.

Nach dem Pumpenausbau und nach Entfernen von 4 Schrauben, konnte das Pumpengehäuse geöffnet werden.
Das Pumpenrad habe ich durch Drehen im Uhrzeigersinn per Hand lösen können, musste dazu nur rückseitig am Motor das Lüfterrad mit einer Zange klemmen, damit sich der Motorläufer nicht mitdreht.



Die 2. zerfetzte Dichtung zeigte sich. Die Scherbe hatte ganze Arbeit geleistet.



War der Preis von 12 € für die erste Dichtung schon übertrieben hoch, so war der Preis >100€ für diese Unterteil mit Dichtung schon unverschämt.
Eine komplette Pumpe inkl. Motor habe ich dann gebraucht für einen Bruchteil dieses Preises über eine Verkaufsplattform erhalten.



Die Dichtung war noch vollkommen intakt und auch das Pumpenrad sah noch nicht so "angeknabbert" aus.

Nach dem Einbau der Pumpe und einem erneuten Programmstart, endlich das ersehnte Ergebnis:



Das Leck ist beseitigt! ... und die Tage des Vonhandspülens sind vorbei.

Kosten der Reparatur: ca. 50 €