Donnerstag, 6. Dezember 2007

Windows Batch Backup Script

ich stand vor kurzem vor dem problem geplanter backups in ner arztpraxis.

auslöser war nämlich, daß in der praxis nur eine person weiß, wie ein backup gemacht wird (via gekaufter software), diese person aber nicht jeden tag da ist, um zu sichern. und prompt kam es zum headcrash und zum datenverlust (3 tage).

ziel:
wenns geht kostenfreie backuplösung
am besten 2x täglich
benutzer (rezeption) soll nichts dazu tun müssen

naheliegend wären ja die geplanten tasks, aber beim aufruf der "Sicherung" (start > programme > zubehör > systemprogramme > Sicherung) muss der benutzer dann doch wieder ran.
ergo: die gute alte batch muß her.

mein script benötigt einmalig (per texteditor; anfang des scripts) das verzeichniss, in dem das backup erstellt werden soll, und den pfad zu einer filterdatei, in der steht, welche verzeichnisse gesichert werden sollen (wird mit "Sicherung" erstellt, indem man im reiter "Sichern" die verzeichnisse anwählt und dann die auswahl via Auswahl > Auswahl speichern ... in einer .bks datei speichert).

nach aufruf des scritpts passiert folgendes:
das script erstellt bei bedarf das backup verzeichniss und wechselt dorthin.
dann wird geprüft, ob ein ordner 'morgens' existiert, bei bedarf erstellt und ein backup inselbigem erstellt.
gibts den ordner 'morgens' schon, wird ein verzeichniss 'abends' gesucht. existiert es nicht, wird es erstellt, hineingewechselt und darin das backup erstellt.
gibts den order 'abends' schon, haben wir (theoretisch) schon zwei backups gemacht und können aufhören.

und das ganze in batch:


@echo off
rem *********************************** Start VARIABLEN
set BACKUPDIR=d:\backup
set FILTER=d:\filter.bks
rem *********************************** Ende VARIABLEN

rem *********************************** Start ANFANGSBILDSCHIRM
cls
echo Willkommen zu Ihrem lieblings Backup Programm:
echo ==============================================
echo.
echo.
rem *********************************** Ende ANFANGSBILDSCHIRM

rem *********************************** Start VERZEICHNISSE
echo Suche Verzeichniss "%BACKUPDIR%" ...
IF not exist %BACKUPDIR%. (
echo Verzeichniss existiert noch nicht. Wird erstellt ...
mkdir %BACKUPDIR%
)

echo Wechseln zu %BACKUPDIR% ...
cd %BACKUPDIR%

echo Suche Verzeichniss "%DATE%" ...
set DATEDIR=%DATE%
IF not exist %DATEDIR%. (
echo Verzeichniss existiert noch nicht. Wird erstellt ...
mkdir %DATEDIR%
)

echo Wechseln in Verzeichniss %DATEDIR% ...
cd %DATEDIR%

echo Suche Verzeichniss "morgens" ...
IF not exist morgens. (
echo Verzeichniss ecistiert noch nicht. Wird erstellt ...
mkdir morgens
echo Wechseln in Verzeichniss "morgens" ...
cd morgens
) ELSE (
echo Heute morgen wurde schon gesichert.
echo Suche Verzeichniss "abends" ...
IF not exist abends. (
echo Verzeichniss nicht gefunden. Wird erstellt ...
mkdir abends
echo Wechseln in Verzeichniss "abends" ...
cd abends
) ELSE (
echo Heute wurde bereits zwei mal gesichert. Gut so!
goto ende
)
)
rem *********************************** Ende VERZEICHNISSE

rem *********************************** Start BACKUP
echo Erstelle BACKUP in %CD% ...
ntbackup.exe backup "@%FILTER%" /v:yes /r:no /rs:no /hc:off /m normal /j "Sicherung" /l:n /f "%CD%\Sicherung_%DATE%.bkf"
echo Geschafft.
rem *********************************** Ende BACKUP

:ENDE
pause

(link)

jetzt muß nur noch via 'geplante Tasks' ein job erstellt werden, der täglich (werktags) morgens und abends einmal unser script aufruft und wir habens geschafft (=

Fonera zerflashen

hab soeben meine Fonera zum dritten mal erfolgreich geflasht und bin jetzt denkich mal soweit, meine erfahrungen mit euch zu teilen ^^

ACHTUNG: DAS HIER IST IM GROßEN UND GANZEN NICHT AUF MEINEM EIGENEN MIST GEWACHSEN UND BLOß EIN RESUMÉE DESSEN, WAS BEI MIR FUNKTIONIERT HAT (SIEHE QUELLEN). FÜR ETWAIGE SCHÄDEN SEID IHR SELBST VERANTWORTLICH!!!

zunächst ein paar fakten:

  • auf der fonera läuft von haus aus openwrt
    (mit hübchem, aber sehr beschnittenem webinterface)

  • sobald das gerät eingeschaltet wird und internet zugang hat, verbindet es sich mit seiner heimat, um firmwareupdates und konfigurationen automatisch einzuspielen
    (funktioniert anstandslos, ist aber für unsre zwecke eher hinderlich)



unser erstes ziel: SSH freischalten
dazu benötigen wir:

(eigentlich benötigen wir für SSH bloß die sshenable.htm. aber da wir unter umständen zwichenzeitlich kein internet haben, sollten alle files vorher auf der platte sein ^^)

als erstes trennen wir die fonera vom internet (weil wir die alte firmware der werkseinstellungen brauchen) und drücken mit dem bleistift den resetknopf auf der unterseite der fonera für 20 sekunden. danach sollten die wlan- und die internet-led kurz erlöschen, was signalisiert, daß die fonera neu startet.
von nun an hat die fonera die firmware 7.1r1 (aber bloß, bis sie wieder internet hat), welche eine lücke im webfrontend hat, die es gestattet den ssh-server zu starten (ist nämlich bereits drauf). dazu muß das netzwerk wie folgt eingestellt werden:
ip: 169.254.255.2
mask: 255.255.0.0
gateway: 169.254.255.1
dns: 169.254.255.1
da die fonera am ethernetport vorübergehend die adresse 169.254.255.1 hat. nun rufen wir via browser die auf dem webserver hinterlegte datei sshenable.htm auf und bestätigen den dialog.
nach kurzer zeit sollte das webui der fonera erscheinen (http://169.254.255.1/...) und die fonera via sh erreichbar sein.



nächstes ziel: Redboot
ssh ist zwar schön, aber flash0rn geht aus redboot; alo los!
jetzt gehts mit ssh (root:admin) auf die fonera, von wo aus ihr euch via wget in /tmp die dateien openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma organisiert:


cd /tmp

wget http://169.254.255.2/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma


die enthält ein gepatchtes rootfs und wird mit:


mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7


ins flash geschrieben. die fonera sollte jetzt neu gestartet werden:


reboot


(oder reset ...)
wieder mit ssh auf die fonera und wieder in /tmp. jetzt die out.hex besorgen:


wget http://169.254.255.1/out.hex


geflasht wird mit:


mtd -e "RedBoot config" write out.hex "RedBoot config"


und wieder:


reboot


ab sofort sollte die fonera kurz nach dem anschalten für ca. 10 sekunden über telnet erreichbar sein, also strom raus.
bei den netzwerk einstellungen sollte jetzt die ip auf 192.168.1.111 gessetzt werden. wir öffnen zwei terminals, wobei das eine die 192.168.1.254 pingt, und das andre mit


telnet 192.168.1.254 9000


im anschlag auf eine antwort des pings wartet, also strom wieder rein.
der kurz darauf erscheinende dialog wird mit ^C abgebrochen und ihr seid im bootloader ^^.

für MacOSX/BSD Systeme:
es hat mich einige zeit gekostet, um rauszufinden, daß BSD systeme ein 'falsches' zeichen als BREAK senden. daher muß vorher auf der konsole:


echo -e "\0377\0364\0377\0375\0006" > break


eingegeben werden. und telnet startet ihr mit:


nc -vvv 192.168.1.254 9000 < break ; telnet 192.168.1.254 9000


und auf zum dritten ziel: anderes system
für openwrt benötigen wir 2 dateien auf einem tftp server:

zuerst gehts mit telnet in redboot (s.o.). von dort aus werden nun nacheinander folgende befehle eingegeben:

RedBoot> ip_addr -h 192.168.1.111 -l 192.168.1.254/24

RedBoot> fis init

RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-root.jffs2-64k

RedBoot> fis create -f 0xA8030000 -l 0x006f0000 rootfs

RedBoot> load -r -v -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma

RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7

RedBoot> fis load -l vmlinux.bin.l7


mit 'ip_address' wird die locale ip und die des std. servers (z.B. für tftp) gesetzt.
'fis init' löscht das flash.
'load -r ...' lädt eine datei über tftp als image an eine freie telle im ram.
'fis create ...' schreibt ein image aus dem ram ins flash.
'fis load ...' lädt ein image aus dem flash in den speicher (zum ausführen; in unsrem fall den kernel).
'exec' startet das zuvor geladene image.
der erste 'fis create ...' dauert etwa eine viertel stunde und sollte wegen timeout nach ein paar minuten durch die eingabe von 'ip' gefolgt werden (beim prompt dann wieder einmal enter, damit der befehl ausgeführt wird; zeigt die ip konfiguration der fonera an).
ab sofort sollte openwrt auf der fonera (192.168.1.1) installiert sein; eine schöne grundlage für weitere spielereien ... =)



sollte jemand wieder die original firmware benötigen, folge er folgendem kleinen auszug aus der wiki von dd-wrt:

1) Download the firmware:
Download and unzip a pre-converted zip file:
7.1.1 version (Enable-SSH hole is OPEN in this version)
(http://rapidshare.com/files/18083671/fo ... d.zip.html)
7.1.2 versions (Enable-SSH hole has been patched in this version)
(http://uselesshacks.com/files/fonera_0.7.1.2.zip)
If you want the firmware directly from FON, download it here: Fon.com (http://www.fon.com/)
(Direct link (http://downloads.fon.com/firmware/curre ... .7.1.3.fon) ) then follow these
steps to convert it to usable files:
1.a) Remove the first 520 bytes of the downloaded file.
On Linux, Mac OS X (or other *nixes):



tail --bytes +520 fonera_0.7.1.3.fon > fonera_0.7.1.3.tar.gz


Windows: Use the mirrored zip files which are already converted.
1.b) Change the extension of the resulting file to .tar.gz and untar it.
2) You need 2 files from the steps above, kernel.lzma and rootfs.squashfs. Put these in your TFTP
server root directory. If you don't have a TFTP server, go back the beginning of this document and
set one up.
3) Connect to the RedBoot prompt and type in the following commands:


RedBoot> ip_address -l 192.168.1.254/24 -h 192.168.1.111
RedBoot> fis init
RedBoot> load -r -v -b 0x80040450 rootfs.squashfs
RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs
RedBoot> load -r -b %{FREEMEMLO} kernel.lzma
RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
RedBoot> fis load -l vmlinux.bin.l7
RedBoot> exec



nach einem reboot sollte die original firmware wieder einsatzbereit sein.


wer statdessen dd-wrt installieren möchte (hat ein sehr umfasendes webui), dem sei es freigestellt, sich die 4 files aus der downloadsektion (LINK > beta > fonera > ...) herunter zu laden und der fonera_flashing.txt zu folgen =)

quellen:

http://google.com

http://uselesshacks.com/?p=23 (für die sache mit ssh&co)

http://www.dd-wrt.com/wiki/index.php/La ... e_Flashing (original firmware wiederherstellen)

http://www.dd-wrt.com/phpBB2/viewtopic.php?t=8858

http://wiki.chaostreff-dortmund.de/wiki/La_Fonera

Samstag, 22. September 2007

LCD for dummies


LCDs sind billige und einfach zu handhabende ausgabegeräte für nahezu alle bastelprojekte.
hier gibts ein fröhliches sammelsurium an links und erfahrungsberichten zum thema LCDs.

die HT44870 kompatiblen displays besitzen (in der regel) 16 pins.
davon sind die letzten beiden (15 und 16) zur steuerung der hintergrundbeleuchtung (und werden später, wenn samples vorhanden sind, in der beschreibung ergänzt ^^).
pin 7 (D0) bis einschließlich 14 (D7) entsprechen den acht daten bits 0 bis 7.
pin 6 (E) dient zum takten der befehle. (beim schreiben high>low, beim lesen low>high)
pin 5 (R/W) wählt lese (high) oder schreib (low) modus.
pin 4 (RS) bestimmt, ob befehle (low) oder zeichen (high) übertragen werden.
pin 3 (Vee) dient zur kontrast regelung (auf 0V ziehen oder über poti betreiben sollt genügen)
pin 2 (Vdd) ist die versorgungsspannung. (im datanblatt werden zwar 5V angegeben. manchen modulen reichen aber auch schon 3V, wodurch sie sich hervorragend zum betrieb mit batterien eignen)
pin 1 (Vss) ist ground der schaltung.

und mit folgendem script läßt ich die winamp ausgabe umlenken (host software muß ich erst wieder erfragen):

#Header
%Common.SetPriority(100)
#EndHeader

#TextMode
/insert textmode script code here/
#EndTextMode

#GfxMode
%LCD.Gfx_SetRefreshArea(15,0,84,48)
%LCD.Gfx_SetFont('arial narrow',8,1)
%LCD.Gfx_SetOverlayMode()
%CleanUp.ClearVRAM()


/Spektrumanalyzer/
%WinAmp.SpecAnalyzer(FFT,PeakedBars,18,12,40,1,0.5,2,1,2,0)

/Zeitanzeige/
" "
%System.GetDateTime(hh:nn)

/Fortschrittsbalken Track/
%Format.Bar(Horizontal,80,5,100,%WinAmp.TrackLength(),%WinAmp.TrackPos(),1,1,2,13)

/Linien/
/%LCD.Gfx_SetPen(0,0,1)/
/%LCD.Gfx_LineTo(0,48,1)/
/%LCD.Gfx_LineTo(166,48,1)/

/Titel Artist/
%Format.AlignCenter()
%Common.CreateNewLine()
%Param.EnableScrolling(Horizontal,Ticker,0.2,80,1)
%WinAmp.Artist()
%Common.CreateNewLine()
%Param.EnableScrolling(Horizontal,Ticker,0.2,80,1)
%WinAmp.Title()

#EndGfxMode

Speedort W701V mit AVM Firmware (Fritz!Box)

die T-Com lässt viele ihrer produkte (glücklicherweise ^^) bei AVM produzieren, was vermuten lässt, daß dabei die gleiche hardware wie bei den Fritz!Boxen aus eigenem haus verwendet wird.

und zu unser aller freude ist das auch der fall, was uns zum nächsten punkt bringt: die software der t-com geräte ist unter aller sau, wenn man sich die fritz!box software zum vergleich anschaut. liegt es dann nicht nahe, die software von avm auf die speedports der t-com zu übertragen?

liegt es, und dank eines kleinen scripts ist das sogar auch n00bs vergönnt, denn bis auf ein knoppix (auch live cd) und das script benötigt man (best case) bloß eine kommandozeile einzutippen.
hier findet sich eine sehr präzise anleitung und das dazugehörige script von Spirou.

UPDATE:
da ich nun selbst im besitz eines Speedport W701V bin, hab ich auch mal die möglichkeit, etwas genauer auf die sache einzugehn:
zunächst benötigen wir zwei alte firmware dateien, eine von AVM und eine von T-COM, und zwar:
- fw_Speedport_W_701V.33.04.25.image (T-COM)
- fritz.box_fon_wlan_7141.40.04.25.image (AVM)

beide dateien sind ins Firmware.orig verzeichnis kopiert, welches nach dem entpacken des spirou pakets bereits erstellt wurde.
eigentlich soll das script die dateien selbt nachladen, aber bei mir ging das mit der t-com datei nicht. einfach (!) von der t-com die entaprechende .tar datei herunterladen und wie oben umbenennen.

danach kann das script mit "./sp-to-fritz.sh -tfn -o avm -h speed.box -m 701" gestartet werden. als ergebnis erhaltet ihr im verzeichnis Firmware.new eure frisch gebackene firmware.

um die datei nun auf den speedport zu bekommen, reicht ein update via webui leider nicht aus. stattdessen muß ein kleiner umweg über ftp in kauf genommen werden.

als erstes entpackt ihr die neue firmware ("tar -xvf new_Sp...image"). im neu entstandenen verzeichnis 'var' liegt irgendwo die datei 'kernel.image'. in dem verzeichnis gebt ihr folgendes ohne mit ENTER zu bestätigen ein: 'ftp 192.168.178.1'
eure netzwerkeinstellungen setzt ihr entsprechend auf '192.168.178.10'.
startet den speedport nun neu und pingt in einem anderen fenster '192.168.178.1'. wenn ihr eine antwort bekommt, bestätigt das ftp kommando.
benutzername + passwort: adam2
nun folgende kommandos eingeben (passiv soll auf ON stehn):


ftp>bin
ftp>pas
ftp>quote MEDIA FLSH
ftp>put kernel.image mtd1
ftp>quote SETENV firmware_version avm
ftp>quote REBOOT
ftp>quit



stellt euer netzwerk wieder auf dhcp und verbindet euch mit dem gerät (via 'speed.box' oder '192.168.2.1').

und als schmankerl zum schuß gibts hier noch das script, die orig. firmware und ein von mir kompiliertes image zum rumspielen ^^
achja ... noch was: solltet ihr euer passwort vergessen und den werksreset machen (#991*15901590* mit telephon an der box) ist euer passwort 0000 (ist ja immer noch ein speedport ^^).

serieller IR empfänger

infrarotempfängerschaltung für den serialport (von orgazmo)

- windows und linux mit jeder angelernten fernbedienung fernsteuern

- benötigte hardware:
eine serielle maus und eine IR empfängerdiode für 2€

- benötigte software:
winlirc fungiert quasi als treiber. hier wird auch die fernbediennung angelernt.
IRAssistant steuert verschiedene programme.





hab gelesen, dass sich die reichweite der fernbedienung auf bis zu 15m erhöht, wenn man statt der diode und dem vorwiderstand einen festspannungsregler verwendet. :)

sony psx gamepad -> LPT port

heute balsteln wir uns eines unsrer übrig gebliebenen psx gamepads an den parallelport unsres rechners, damit wir tony hawk auch am pc mit dem geliebten pad spielen können ^^

-benötigte hardware
ein psx gamepad

-benötigte software
den treiber (für windows) gibts (bisher mal noch) hier.
autohotkey um das script zur window steuerung zu starten

hier der schaltplan:




treiber konfiguration:




und so könnte es aussehen:




das skript erlaubt die nutzung des joypads als maus.
gesteuert wird über den linken analogstick.
viereck -> linksklick
x -> rechtsklick
kreis -> mittlere maustaste

First!

hallo zusammen ^^

dies ist das obligatorische "First!" post. grund für die entstehung dieses blogs ist, daß der maintainer von http://opcnet.de seit geraumer zeit verschollen ist und (meiner ansicht nach) die existens der seite ins wanken gerät.
dies wäre sehr schade, und um ein wenig schadensbegrenzung zu betreiben, wird die 'pr0j3ct5' section hier 'gespiegelt' ... zumindest die abgeschlossenen projekte :)

ich wünsch also viel spaß beim rum experimentieren und freue mich auf reges kommentieren (klingt der sarkasmus raus? ^^)