Feb 13

Zuletzt hab‘ ich mir vor ca. 9Jahren radikales Umlernen angetan. Damals bin ich von dem German-Keyboard Layout auf US-ANSI umgestiegen. Die Sonderzeichen zum Coden waren einfach viel leichter zu erreichen. Waren etwa 3 Wochen Schmerz, danach lief es wie am SchnĂŒrchen. Ich will auch nicht mehr mit nem deutschen Keyboard arbeiten 🙂

Einzig die Eigenheiten von OSX/Linux/Windows haben etwas genervt (Win: Layout per ALT-SHIFT_L umschalten um Umlaute tippern zu können // OSX: Sehr angenehm per Modifier-Key (Mod-“ und dann a,u oder o))

Dummerweise ist mein Model-M damals auf der Strecke geblieben, und musste einem Mac-Keyboard weichen. Hab zwar noch mal ein paar AnlĂ€ufe gestartet, und die Keycaps auf US-INTL gewechselt, war aber irgendwie nichts…

Nun ist es mal wieder an der Zeit etwas neues auszuprobieren. Ein 60% Mechanical-Keyboard. Ca. 2 Monate bin ich um das HHKB herumgetingelt und hab mich am Ende dann doch gegen das Teil entschieden. HĂ€ngengeblieben bin ich Schlussendlich beim Vortex Pok3r, fĂŒr knapp 150Euro – nicht gerade billig.

vortex

Gut, was gibt es fĂŒrs Geld?

  • MX-Schalter (in jeglicher AusprĂ€gung, meine Wahl fiel auf blues)
  • Backlight.
  • Ordentliche (+replaceable) Keycaps.
  • 4 Layer, die schnell umschaltbar sind und bis auf einen frei programmierbar sind (ohne Treiber, oder sonstigen Foo). Die Programmierung lĂ€sst, neben Makros, die freie Belegung von Tasten zu.
  • Alu-„Wanne“ in der die Tastatur befestigt ist.
  • Austauschbare USB-Strippe (Die Poker 3 selbst verfĂŒgt ĂŒber einen Mini (NICHT Micro!) USB Port)
  • All in all: Eine extrem wertige Tastatur (und wenn ich wertig sage, meine ich das auch. Also wertig im Sinne von: „MacBook Unibody ist gut verarbeitet…“.
  • 500g solide Tastatur halt.

Was gibt es nicht, bzw. was macht den Reiz aus?

  • F-Tasten – die fehlen komplett. Sind aber bspw. per „FN+1“ (=F1) erreichbar. Das hatte ich mir persönlich schwieriger vorgestellt. Klappt aber super.
  • Multimedia-Keys. Hab ich – bis auf Laut/Leise – eh immer fĂŒr extrem ĂŒberflĂŒssig gehalten. Am besten noch ’ne EMailtaste, oder wie? Dank der Programmierbarkeit kann man sich den Kram auch auf FN+Irgendwas legen.
  • Cursor-Tasten. Das ist – ehrlich gesagt – der grösste Einschnitt. Ich kĂ€mpfe nun nach ca. 3 Tagen immer noch. Da ich recht viel im vim Arbeite, habe ich mich dazu entschieden das Cursormovement auf HJKL zu legen. Jetzt rĂ€cht es sich, dass ich Jahrelang im vi mit den „normalen“ Cursorkeys navigiert habe. Gut, das wird sicher schon. Alternativ kann man sich, wenn man viel navigieren muss, immer noch die Cursortasten nativ (also ohne FN) auf Layer2 und dann WASD legen. Ein nettes Feature, dass ich gestern Abend erst entdeckt habe: R_ALT+Space macht R_CTRL,PN,FN und R_SHIFT zu Cursortasten. Nochmal auf R_ALT+Space gedrĂŒckt, und die Tasten sind wieder das, womit sie beschriftet sind.
  • Der gesamte Block Home/End/PgUp/PgDn fehlt ebenfalls. Auch hier ĂŒbe ich noch mit FN+N (zB fĂŒr End).

Das Teil macht derartig laune, dass ich gar nicht aufhören möchte zu tippen. Man wird auch echt kreativ damit (das war ja der Zweck des Spiels). Bspw. habe ich mir fĂŒr den Chrome das vimium-Plugin installiert. Mit dem Teil bedient man den Chrome weitesgehends per Keyboard ĂŒber die bekannten vim-KeyBindings. Das auf der Bash „set -o vi“ da schon obligatorisch ist, versteht sich vermutlich von selbst 🙂

Wer sich also selbst mal wieder einen Tritt verpassen will, um vielleicht mehr vim-Keybindings in den Kopf zu bekommen, mehr Platz auf dem Schreibtisch zu haben, RechnerunabhÀngige Makros bauen will oder auch einfach nur eine extrem feine mechanische Tastatur sein Eigen nennen möchte, dem sei die Pok3r ans Herz gelegt.

WeiterfĂŒhrende Links? Klar:

  • Reddit-Post, in dem beschrieben wird, wie man das Ding möglichst vim-gerecht umkonfiguriert.
  • Hersteller (Vortex) – dort gibt es manual und firmware-update – Treiber sind, wie oben beschrieben – nicht notwendig.
  • Vergleich der verschiedenen MX-Schalter.
  • Blog ĂŒber mechanische Keyboards (gute Einstiegsmaterie)

[Update 28.02.2015]

So, nun habe ich das gute StĂŒck seit ca. 2 Wochen. Was soll ich sagen? Jedesmal, wenn ich eine Rubberdome in den Fingern habe (auch so ein flaches Apple-Dings), denke ich: OMG! Mit anderen Worten ausgedrĂŒckt gewöhnt man sich sehr schnell (wieder) an mechanische Tasten. Einzig das Profil der KeyCaps ist etwas ungewohnt. LiebĂ€ugele momentan mit DSA-KeyCaps (z.B. diese hier von Signature Plastics). Haken ist: Der Markt fĂŒr Caps existiert – ernstzunehmend – scheinbar ausschliesslich in den Staaten. In Europa bekommt man nur Ducky/Shiny-Caps. Die mögen fĂŒr Gamer recht sein, fĂŒr „Vieltipper“ nicht.

So richtig geblickt habe ich das mit den unterschiedlichen Profilen aber noch nicht. Bei Logitech gibt man die Profile in „R“ows an, bei SP in DSA, SA, usw. Ein guter Anlaufpunkt, bei dem man aber definitiv Geduld mitbringen sollte, ist massdrop. Massdrop ist so eine Art Genossenschaftseinkauf. D.h. mehrere Interessenten schliessen sich zusammen, und wenn 200 Leute zusammengekommen sind, geht man auf den Hersteller zu, sodass dieser eine Kleinserie auflegt. Mal schauen, ob da was fĂŒr mich dabei ist.

Tagged with:
Mai 31

ipv6 ist nett. Aber der User bekommt halt jedes mal idR ein /64 Subnet. FĂŒr so Tools wie fail2ban, die einzelne IPs blocken, wenn irgendetwas komisches auftaucht irgendwie schlecht. Der Angreifer schnappt sich halt irgendeine neue IP, denn die unteren 64bit stehen ja voll zu seiner VerfĂŒgung.

Jetzt verhĂ€lt es sich mit dem originalen fail2ban so, dass das nicht mal ipv6 kann. Zeit sich auf die Suche zu machen. In einem github-Repo bin ich fĂŒndig geworden. Der gute Mensch hat fail2ban so erweitert, dass es v6-fĂ€hig wird. Also flugs mal installiert, um direkt die ErnĂŒchterung zu spĂŒren: Es blockt mit /128 🙁

Also erweitern:

Die /etc/fail2ban/action.d/iptables-46-multiport-log.conf passen wir wie hier in diesem gist sichtbar an. Hinzugekommen ist lediglich <mask> bei der ban und unban-Regel sowie unter init. Das bedeutet, dass – sofern nicht anders angegeben – immer eine /32er CIDR-Mask gelegt wird, also die gesamte v4-IP (bei v6 halt ebenfalls /32 – aber dazu spĂ€ter mehr) geblockt wird.

Da die fail2ban-Variante von „usrweiss“ im Wrapperscript nicht so granular zwischen v4 und v6 differenzieren kann, als dass wir da andere cidr-Masken drauflegen könnten, legen wir einfach in der /etc/fail2ban/jail.conf ZWEI Jails an:

[web_v4]
enabled = true
filter  = web_v4
action = ip64tables-multiport-log[name=web_v4, protocol="tcp", port="80,443", mask=32]
logpath = /var/log/apache2/web_f2b/fails.log
maxretry= 5
bantime = 60
findtime= 60

[web_v6]
enabled = true
filter  = web_v6
action = ip64tables-multiport-log[name=web_v6, protocol="tcp", port="80,443", mask=64]
logpath = /var/log/apache2/web_f2b/fails.log
maxretry= 5
bantime = 60
findtime= 60

									

Die benötigen wiederrum auch 2 Configs in der /etc/fail2ban/filter.d:

/etc/fail2ban/filter.d/web_v4.conf:

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

[Definition]

failregex = Applikation: v4 (<HOST>) Detaillierte Fehlermeldung .*

									

/etc/fail2ban/filter.d/web_v6.conf:

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

[Definition]

failregex = Applikation: v6 (<HOST>) Detaillierte Fehlermeldung .*

									

Der Haken ist, dass unsere Applikation, die die Events auslöst (hier eine Loginseite, die die Fehlversuche nach /var/log/apache2/web_f2b/fail.log wegschreibt) an die Zeile dranschreiben muss, ob es sich um v4 oder v6 handelt. Bezogen auf die o.g. Configs sieht das in dem fail.log der App so aus (Von der Applikation generierte EintrÀge. Erster: v6, zweiter v4)

[May 31 10:08:12] Applikation: v6 (2a03:2880:2130:cf05:face:b00c:0:1) fehlerhafter Loginversuch blabla
[May 31 10:09:12] Applikation: v4 (173.252.120.6) fehlerhafter Loginversuch blabla
									

Von nun an blockt fail2ban die Ports 80 und 443 sobald in der Logdatei der Applikation (/var/log/apache2/web_f2b/fail.log) 5 mal innerhalb von 60 Sekunden die selbe IP mit einem Fehler aufschlĂ€gt fĂŒr 60 Sekunden. Und zwar bei einer v4 halt die v4, bei einer v6 das /64er Subnet der v6. Die gerade greifende Netzmaske wird in der/etc/fail2ban/jail.conf als Variable „mask“ in der action mit angegeben – sollte dort nichts stehen, gilt der Defaultwert von /32 aus der iptables-46-multiport-log.conf

 

Wie ĂŒblich, geht das sicherlich noch eleganter. Bin gespannt, wann fail2ban endlich eine v6-Variante releast.

Tagged with:
Mai 24

Wie hier im Blog schon beschrieben, habe ich mir mit einem Pi A einen kleinen Statusscreen gebastelt, der sich immer dann anschaltet, wenn jemand in die nĂ€he des Pi’s kommt. Realisiert wurde das mit der PiCam – basierend auf HelligkeitsĂ€nderungen beim Snapshot. Soweit so gut. Seit 2 Monaten hĂ€ngt sich der olle Pi jedoch regelmĂ€ssig auf. So schlimm, dass ich Ihm einen crontab-Eintrag verpasst habe, mit dem er jede Nacht neu bootet.

Zeit der Sache mal auf den Grund zu gehen. Das Problem war: Zu wenig RAM. Der Pi A hat gerade 256MB davon (eigentlich mehr als genug, fĂŒr soetwas). Dummerweise hĂ€ngt in PiCam direkt an der GPU des kleinen Rechners. Was bedeutet, dass man dem Ding in der /boot/config.txt den Parameter gpu_mem=128 mitgeben muss. Heisst: 128MB fĂŒr die GPU (drunter funktioniert die cam nicht) und 128MB fĂŒr das OS. Sofern man nun nicht eine extraschlanke Distribution mit busybox und dem ganzen Small-Mem-Footprint-gedönse nutzt, ist das verdammt mau. Erst recht mit der extrem aufgeblasenen Raspianedition.

Also mussten LösungsansĂ€tze her. Die Cam mit weniger als 128MB GPU-RAM zu betreiben funktioniert also schon mal nicht. Dann halt komplett anders.  FĂŒr gerade mal 1,10 Euro/StĂŒck gibt es bei Amazon PIR-Sensoren. PIR steht fĂŒr Pyroelektrische Passive Infrarot Sensoren. Die Dinger, die man aus den Bewegungsmeldern an Aussenlampen kennt. Das besondere an diesen PIRs ist, dass sie out-of-the-box mit dem Pi ĂŒber GPIO spielen können.

Obwohl das Chinaware ist, ist es relativ gut dokumentiert. In dieser Grafik findet sich alles, was man wissen muss:

Wir sehen zwei Potentiometer, mit denen man die Empfindlichkeit und eine Art „Nachlaufwert“ einstellen kann. Den Timer stellt man am besten auf „0“ (Anschlag ganz links), das „Distanz“-Poti nach Gusto. Nun zum elektrischen:

  • VCC bei dem Ding ist 5V – der kommt also an PIN2 des GPIO’s (+5V OUT)
  • GND auf GND – PIN 6
  • OUT ist der PIN, der „HIGH“ wird, wenn sich was vor dem Sensor bewegt. Und coolerweise spuckt das Ding ca. 3,3V aus – also genau richtig fĂŒr den GPIO. Den hĂ€ngen wir an GPIO18 (PIN 12)

Hier eine Übersicht der GPIO-PINs des raspis:

Nach dem das nun alles Erledigt ist, geht es zum simpleren Teil. Der Software. Ich habe das ganze, wie bereits beim Cam-Script in Python realisiert:

#!/usr/bin/python
import subprocess
import os
import time
import RPi.GPIO as io
from datetime import datetime
delay=60
monitor='on'
pir_pin = 18
io.setmode(io.BCM)
io.setup(pir_pin, io.IN)         # activate input

def turnMonitorOn(extrarg):
  global monitor
  monitor='on'
  subprocess.call("/usr/bin/screen.sh on "+extrarg, shell=True)

def turnMonitorOff(extrarg):
  global monitor
  monitor='off'
  subprocess.call("/usr/bin/screen.sh off "+extrarg, shell=True)
   
# Reset last capture time
lastCapture = time.time()
# added this to give visual feedback of camera motion capture activity.  Can be removed as required

while True:
  time.sleep(0.5)
  if io.input(pir_pin):
    lastCapture = time.time()
    if (monitor == 'off'):
      turnMonitorOn("y")

  if (time.time()-lastCapture > delay):
    if (monitor == 'on'):
      turnMonitorOff('x')

									

In der Variable „delay“ kann man einstellen, wie lange der Screen nach einer Bewegungserkennung angeschaltet bleiben soll. Es sind natĂŒrlich auch andere Pins als GPIO18 möglich (bspw. GPIO4 / Pin7)

Das Shellscript, „screen.sh“ ist dasselbe, wie im Cam-Post:

#!/bin/bash
tvstat=$(tvservice -s |grep off)
if [[ $tvstat == *off* ]]; then
TV=OFF
else
TV=ON
fi

if [ "$1" == 'on' ] && [ "$TV" == "OFF" ]; then
/usr/bin/tvservice -p;
#fbset -depth 8;
#fbset -depth 16;
chvt 2;
sleep 1
chvt 1;
chvt 2;
chvt 1;
#echo 'Switched Screen ON!'
fi
if [ "$1" == 'off' ] && [ "$TV" == "ON" ]; then
/usr/bin/tvservice -o
echo 'Switched Screen OFF!'
fi

									

Nun noch in der /boot/config.txt den Wert gpu_mem auf 32 oder gar 16 stellen, rebooten, und wir haben wieder mehr als genug RAM. Dass die CAM nun nicht mehr funktioniert, sollte jedem klar sein – aber das war ja auch Sinn und Zweck der Sache.

Tagged with:
Apr 26

Ich betreibe hier seit ĂŒber einem Jahrzehnt ein paar von diesen netten gĂŒnstigen Dallas-1-Wire Dingern (DS1820) an einer Linuxkiste mit samt USB-Host-Adapter im sog. „Parasite-Mode“ (Ausser GND und Data benötigt man da nichts, und kann ein paar von den Sensoren – an bspw. im Haus liegenden Telefonkabeln – abfragen).

Der USB-Host-Adapter ist eigentlich ĂŒberflĂŒssig, da der Pi das mit seinen GPIO’s von Haus aus kann. Und das ganze ist derartig trivial, dass ich es hier kurz erklĂ€ren will. Man nehme:

  • den o.g. DS1820 (da gibts div. Variationen von, die sich in der PrĂ€zision unterscheiden – kosten ca. 2 Euro)
  • Einen Pi – mit Linux drauf.

 

Den 1820 wie folgt mit dem Pi verbinden:

GND auf GND // Vdd auf 3,3V // VDQ (Data) auf GPIO 4

(Hier eine Ansicht des 1820, und hier eine des GPIO-Ports vom Pi)

Dann ab auf die Shell und kurz 2 Kernel-Module nachladen:

 pi@rasbberrypi ~ $ sudo modprobe w1-gpio pullup=1
 pi@rasbberrypi ~ $ sudo modprobe w1-therm
									

Wenn alles richtig gelaufen ist, gibt es unter /sys/bus/w1/devices nun ein neues Verzeichnis mit der Unique-ID des 1820 (Die haben alle eine Art Mac-Adresse, die die einmalig macht) in dem wiederum eine Datei mit dem Namen „w1_slave“ liegt. Angenommen der 1820 hat die ID „28-0000041234567“ so heisst unsere Datei : „/sys/bus/w1/devices/28-000004593386/w1_slave“. Wenn man sich diese anzeigen lĂ€sst (zB via cat), kommt (etwas unsexy) der platte Temperaturwert als ASCII zum Vorschein.

Den hĂŒbschen wir nun noch auf, und schon haben wir einen Wert, den man weiterverarbeiten kann (snmp, website, wo auch immer):

cat /sys/bus/w1/devices/28-000004593386/w1_slave |\
grep -e 't=' | \
awk -F't=' '{print $2}'
									

GĂŒnstiger kann man keine Temperaturen messen – und erweiterbar und flexibel ist es auch noch. (Es sei denn man will unbedingt 100 Euro fĂŒr das neueste, hippe, bunte Temperaturmessdevice, dass nur mit App lĂ€uft, ausgeben und die Werte alle Nasen lang in die Cloud pumpen…)

Tagged with:
Jun 10

Schreibe hier mal nach und nach ein paar hilfreiche Erfahrungen auf, wenn man – wie ich – den Schritt von IOS nach Android wagt, und von der ganzen Cloud-Struktur nicht so viel hĂ€lt.

Ein wenig eigene Infrastruktur je nach Geschmack (Mailserver, CAL-/CARDDAV-Server, Proxy mit adblocker nach gusto, eigener DNS) sollte es jedoch schon sein, wenn man die wichtigsten Daten von der Cloud fernhalten möchte. Das war unter ios so, und gilt unter Android mehr denn je. Also los gehts mit den Basics:

  • Mails: Da eignet sich K9-Mail ganz gut – ist etwas anders als Mail.App zu bedienen, kann aber nach meinen Vertestungen am meisten
  • Kalendersync: CalDAV-Sync integriert den eigenen CalDAV zu 100% in die Android-Welt, und das ganz ohne gmail-Kalender. Reminder und Co. funktionieren sauber!
  • Telefonbuch: CardDAV-Syncfree synct wunderfein die Kontakte mit dem heimischen CardDAV-Server (zum einsatz kommt hier ĂŒbrigens davical)
  • Notizen: Werden bei ios/osx als „spezielle Mail“ in einem Subfolder mit Namen „Notes“ abgelegt. Da gibts was gĂŒnstiges fĂŒr den Droiden: iNotes – nicht von der Beschreibung im Store verwirren lassen, der spielt echt mit jedem imap (hier ist der gute alte cyrus im Einsatz)
  • Twitter: Tja. Da bin ich noch nicht so ganz weiter. Tweetbot gilt nach wie vor als ungeschlagen. Aber Tweetveo kommt zumindest schon mal etwas dran. [Update 10.06.14] Plume isses ! Tweetmarker-Support. Suchen nach Antworten – also all das was Tweetbot auch kann – zumindest auf den ersten Blick. Danke an @bridgerdier [Update 05.12.2014] Fenix ist der Twitterclient der Wahl
  • Newsreader: Original tt-rss Client fĂŒr tinytiny – geht doch 🙂

Nun bringt das alles herzlich wenig, wenn man die Äpps auf dem Device, sowie das OS nicht einigermassen abschotten kann. Und an dem Punkt kommt Cyanogenmod – das mich ĂŒberhaupt bewegt hat, von IOS nach Android zu wechseln – ins Spiel. Nicht ganz trivial zu installieren (Grobe Vorgehensweise: Bootloader unlocken, CWM/TWM aufspielen, Image installieren) aber in der Version 11 (Analog KitKat) sehr empfehlenswert. So lĂ€sst sich jede Äpp beliebig kastrieren (Bis hin zu: „Darf die App vibrieren?“ und so). Ein Feature das google seit 4.4.2 wieder ausgebaut hatte. Hier isses drin. Und das ganze CM11 ist echt stabil.

Wer dann den Droiden noch weiter abschotten möchte, dem sei (CM11 bzw. root vorrausgesetzt) noch Droidwall ans Herz gelegt. Ganz platt gesagt ist Droidwall ein Frontend fĂŒr iptables mit dem man pro Äpp sagen kann, ob diese ĂŒberhaupt ins Netz darf. Heisst: Wenn ich bspw. ne Taschenlampe installiere, dann braucht die mal definitiv keinen Netzzugriff… Logging gibts gratis obendrauf.

Ansonsten macht AdFree von BigTinCan noch den solidesten Eindruck. Warum das Teil von einer sehr dubiosen Website kommt, nicht im Playstore verfĂŒgbar ist und ĂŒberhaupt, weiss wohl niemand. Habe dieses Ding ausgewĂ€hlt, weil es ganz simpel die /etc/hosts um einschlĂ€gige Werber ergĂ€nzt, und echt nicht mehr anstellt. Alles andere wollte direkt Nutzungsdaten und Co. nach Hause funken. Dieses schicke kleine APK macht genau das was es soll (Werbung fernhalten – und das auch noch relativ elegant).

[Update 11.06.14] Mit IOS8 soll es ein Update geben, bei dem das iPhone die Mac-Adresse des WLAN-Interfaces randomisiert wĂ€hrend es keinerlei Connect zu einem WLAN hat. Löbliches Feature. Geht mit dem Droiden natĂŒrlich auch. Guckst du Pry-Fi im Playstore. Das das Teil root-Rechte benötigt, liegt auf der Hand.

Am meisten weggetan hat das Messaging. Kenne ich doch recht viele ios-iMessage Menschen. Da gibt es leider nur Pest oder Cholera als Ersatz. Facebook möchte ich nun nicht gerade in Form von WhatsApp beglĂŒcken, also hab ich mich neben SMS fĂŒr Google-Hangouts entschieden. Ob bei Kurznachrichten jetzt Apple oder google mitliest ist da relativ. (Nur FB sollte es halt nicht sein). Das ganze Thema Messaging ist extremst unbefriedigend, sowohl unter ios als auch unter Android. Diesen ganzen Placeboteile wie Threema und wie sie nicht alle heissen kann man auch nicht trauen (ist halt kein opensource). Daher gibts hier halt einen Kompromiss.

Wenn jemand noch weitere Tips hat, immer gern her damit.

Gesucht wird bspw. noch:

  • PodFetcher
  • FeedReader (Gut, Feeds lese ich hauptsĂ€chlich auf dem iPad – aber wer weiss: Vielleicht kommt da ja auch irgendwann mal ein Droide hin)
Tagged with:
Jan 25

Gaaaanz kurze knackige Anleitung, wie man einen PGP/GPG Key beglaubigt  bzw. signiert (unvollstĂ€ndig, und OHNE Anleitung, wie man den Key auf korrektheit prĂŒft – idealerweise signiert Ihr nur Keys, bei denen Ihr 100%ig sicher seid, dass diese auch vom passenden Keyowner kommen 🙂 )

Shell:

[gpg –list-keys] Pub-Key-ID des zu signierenden keys merken

[gpg –sign-key <pubkeyid>] Das eigentliche Signieren

[gpg –send-keys <pubkeyid>] Signieren dem Keyserver bekanntmachen

OSX / GPGTools:

  • GPG SchlĂŒsselbund (GPG Keychain) starten.
  • Rechte Maustaste auf den zu signierenden Key
  • Beglaubigen anclicken, Details entsprechend wĂ€hlen und OK drĂŒcken
  • Wieder rechte Maustaste, diesesmal „Öffentlichen SchlĂŒssel an SchlĂŒsselserver senden“

Der letzte Punkt – also das Veröffentlichen der Beglaubigung, wird gern vergessen. Ohne diesen Schritt ist das ganze jedoch recht witzlos.

[UPDATE]

Bei mehreren uids (IdentitÀten) pro Key:

  • Doppelclick auf den Key in der Keychain-GUI
  • Wechsel auf den „Benutzer-ID“-Tab
  • Zu bestĂ€tigende IdentitĂ€t OBEN auswĂ€hlen
  • Unten auf das Plus clicken und beglaubigen
  • Anschliessend wieder raus, und „Öffentlichen SchlĂŒssel an SchlĂŒsselserver senden“ (s.o.)
Tagged with:
Jul 14

Seit lĂ€ngerem bin ich nun schon wieder mit dem Gedanken an eine Tageszeitung schwanger. Doch von vorn: FrĂŒherℱ, als wir noch im Sauerland gewohnt haben, gab es kaum Auswahl. Da war (an Lokalangeboten) entweder die WestfĂ€lische Rundschau, oder die Westfalenpost (beides WAZ-Gruppe) im Abo.

Nach dem Umzug ins Rheinland (genauer Königswinter) kam dann der General-Anzeiger ins Spiel. Man fĂŒhlte sich einigermassen informiert. Ich muss dazu sagen, dass mir eine Papierzeitung allenfalls Stichworte bietet, und ich interessante Dinge eh im Netz nachrecherchiere (Medienkompetenz und so :). 2 Jahre spĂ€ter, endlich sesshaft in Unkel geworden, stand ich nun vor einem Dilemma. Nicht mehr NRW, und auch (gefĂŒhlt) nicht Rheinland-Pfalz. Unkel ist quasi der fast nördlichste Teil von RLP auf der rechten Rheinseite. Mit dem Effekt, dass der Generalanzeiger den lokalen Part nicht mehr abdeckte (nicht NRW) und die Rheinzeitung, die 2-3 mal in denen ich das Blatt an der Tankstelle gekauft hatte, lokal auch nicht so richtig ĂŒberzeugen konnte.

Fazit: Projekt „Jörg kommt ohne Tageszeitung aus – das Netz bietet ja alles“ wurde gestartet.

Jetzt, knapp 2,5 Jahre, und ca. 10 TestkĂ€ufe der Rheinzeitung (Printvariante) spĂ€ter erklĂ€re ich das Projekt fĂŒr gescheitert. Die RZ muss (mangels Alternativen, was das Lokalgeschehen angeht) an den Start. Nun gut – mal auf der RZ-Seite umsehen. Ahhh – Abo’s! Aber wo sind die Preise? Dank des schnellen und unkomplizierten Supports des RZ-SocialMedia-Teams (Danke an dieser Stelle!) via Twitter hatte ich die auch schnell gefunden und bin dabei ĂŒber das „Digitalabo“ gestolpert.

Digitalabo? Klingt spannend!

Erster Begeisterung folgte schnell die ErnĂŒchterung. Das DigitalAbo des Blatts ist nett gedacht, aber bescheiden umgesetzt. Man lĂ€dt eine „App“ auf sein Tablet, und kann dann aus der Äpp heraus entweder „Demoausgaben“ (zum Test reicht das), volle Tageszeitungen (In-App-Purchase) oder unter Angabe seiner Abo-Nummer die Zeitung aufs Tablett/Smartphone laden. Bis dahin alles fine. Nun, was erwarte ich von einer Digitalausgabe der Zeitung, und was wird mir tatsĂ€chlich geboten?

  1. Wenn die Zeitung schon digital vorliegt, wĂŒnsche ich mir, Ă€hnlich RSS, ein Inhaltsverzeichnis, in dem ich schnell von Ressort zu Ressort (Politik, Wirtschaft, Kultur, Lokales, …) springen kann. Ist sogar rudimentĂ€r vorhanden – man muss allerdings erstmal auf die Idee kommen, das „Sternchen“ oben rechts in der App (welches normalerweise fĂŒr „Favoriten“ o.Ă€. steht) anzuclicken. Leider war es das dann aber auch schon mit dem Inhaltsverzeichnis. Einen Index der Artikel sucht man vergebens. Ich meine: Hey, die Daten liegen doch vor. Stattdessen wird mir die Zeitung so prĂ€sentiert, als wenn ich sie in Papierform vor mir hĂ€tte, unnĂŒtze Animationen beim „UmblĂ€ttern“ incl. – Index: Fehlanzeige
  2. (Internet-)Links. In der gedruckten, wie in der Digitalen Ausgabe wird oft am Ende eines Artikels auf einen weiterfĂŒhrenden Artikel im Netz verwiesen. So lange man sich in der „Übersichtsanzeige“ (in der selbst auf einem Tablet die Artikel nicht lesbar – weil zu klein – sind), kann man bei einigen Artikeln auch auf einen „roten Pfeil“ clicken, und den Links folgen. Klappt aber auch nur bei diesen roten Pfeilen. Links die im Fliesstext auftauchen, lassen sich leider nur per mĂŒhsamen Copy&Paste manuell öffnen. Funktionen, wie sie bspw. in Feedreadern benutzt werden (Open link in Browser / Twitter link / etc.): Fehlanzeige. Im „Einzel-Lesemodus“ (siehe Punkt 3) tut das schon etwas besse – zumindest werden dort Links als solche erkannt, und auch angezeigt.
  3. Printlayout auf eine Onlineausgabe zu ĂŒbertragen, halte ich gelinde gesagt fĂŒr mutig. Das klappt, wenn man Mehrwert bietet (Die Wired sei hier lobenswert erwĂ€hnt), aber nicht wenn man das Ding einfach 1:1 auf das Lesedevice legt. „Doppeltap“ auf einen Artikel funktioniert nur teilweise, da sich der Textfluss stoisch am Printlayout orientiert. Mit anderen Worten: Fliesstext um ein Bild herum ist auch in der App weiterhin Fliesstext um ein Bild herum. So etwas unterbricht den Lesefluss, und damit die Freude am Blatt. Merke gerade: Wenn man keinen Doppeltap, sondern einen einfachen Click macht, poppt eine Art Reader auf, in dem das Lesen schon besser funktioniert. Ein „Schliessen“ sucht man vergeblich – geschlossen wird der Reader, in dem man nochmals tappt (ich tappe da eher in die Falle, denn wenn das Ding scrollt, tappt man ja auch einmal, um es anzuhalten – hier wird dann in der App der Artikel geschlossen) Intuitiv geht aber anders. Diese Reader-Nummer funktioniert ĂŒbrigens nur, wenn man nicht schon vorher im Layout herumgezoomt hat. Schade.
  4. Last but not least: Warum gibts das ganze nicht als ePub oder im freundlichen RSS-Format?

Fazit fĂŒr mich: Die Papierausgabe werde ich zunĂ€chst mal abbonieren. Bei der Digitalausgabe ist die Rheinzeitung auf einem guten Weg, aber es gibt noch sehr viel zu tun, bis das Teil rund ist. Kostenpunkt des „Maschinen“-Abos: ca. 3 Euro monatlich zusĂ€tzlich zum normalen Totholz-Abo. Das ist fair. Aufgrund der o.g. Punkte bleibts dann fĂŒr mich auch erstmal beim Papierabo.

Tagged with:
Jul 18

Es ist, gefĂŒhlt, 6 Jahre her, dass ich so richtig Urlaub gemacht habe (Also so ohne, dass man zwischendurch immer wieder fĂŒr den Kunden etwas tun muss, und einfach nur Ruhe hat). Umso mehr haben wir uns alle gefreut, als es Anfang Juli an die MĂŒritz in Mecklenburg-Vorpommern ging. Genauer gesagt nach „Alt-Schwerin“ am Plauer See. Jetzt ist Mecklenburg-Vorpommern nicht gerade mit exorbitanter Infrastruktur gesegnet. Auf der einen Seite schön (sehr ruhig), auf der anderen sind es Meilenweite Entfernungen zum nĂ€chsten Ort.

Um diese Distanzen zu ĂŒberbrĂŒcken, hatten wir uns eigentlich fest vorgenommen die FahrrĂ€der auf einem FahrradgepĂ€cktrĂ€ger mitzunehmen. Als ich dann allerdings nachgerechnet habe, und auf knapp 700km Anreise gekommen bin, haben wir das ganz schnell wieder verworfen. Mit dem Auto kommt man genau so gut vorwĂ€rts. An FreizeitaktivitĂ€ten wird echt viel geboten. Um nur ein paar Dinge aufzulisten:

  • Panzer fahren (Alte NVA-Kaserne)
  • Auf einer stillgelegten Reichsbahnstrecke kann man zu dritt mit einer Draisine und Muskelkraft die Landschaft geniessen.
  • Museen sind eigentlich nicht so meins. Aber das MĂŒritzeum in Waren, kann wirklich was. Interaktive Exponate rund um die Natur und Entstehung der Seenplatte…
  • Bootstour mit einem „Passagierdampfer“ ĂŒber 5 Seen, incl. zwischendurch immer wieder dezent eingestreuten Informationen (war wirklich dezent).
  • In Plau am See gibt es Valk-Jollen zu mieten(Ein wenig Segelerfahrung und ’nen SBF Binnen, mindestens aber SBF-See  ist Voraussetzung). Haben wir dann auch gleich mal gemacht. Herrlich. Kaum Motorboote unterwegs. Schöne lange Strecken, sodass es von einem Manöver zum nĂ€chsten schonmal durchaus ’ne Stunde dauern kann. Mit der Valk kann man sicher keinen Preis gewinnen, dafĂŒr ist das Ding gutmĂŒtig wie nur sonstwas. Leider hatten die Boote keinen Verklicker, dafĂŒr aber ein paar BĂ€ndsel. Und wenn man sich nicht allzu blöd anstellt, kann man daraus ja auch ablesen ob die Segelstellung richtig ist. Wer ĂŒbrigens ein Boot sein Eigen nennt, kann sogar mit diesem Anreisen und bekommt einen Liegeplatz direkt vorm Ferienhaus.

    Valk Jolle auf dem Plauer See

  • Wer auf alte Ost-Dörfer steht, kommt in der Gegend voll auf seine Kosten. Kopfsteinpflaster, soweit das Auge reicht. ErwĂ€hnt werden sollte hier: GĂŒstrow, Schwerin (Sitz des Landesparlaments McPomm mit malerischem Landtag) und natĂŒrlich Malchow, welches so der erste Anlaufpunkt ist wenn man Lebensmittel & Co. benötigt 😉

Was die Unterkunft angeht. Besser hÀtte man es gar nicht treffen können. Wir hatten ein Ferienhaus: 8m bis zum See, bestens ausgestattet, SonnenuntergÀnge von denen man selbst in der Eifel trÀumt, DSL2000 am Start und massivst Sonne.

Dive into the deep sea
Das Bild ist direkt von einem kleinen Weg vorm Ferienhaus aus aufgenommen. Schöner geht doch wohl kaum, oder ?

Des weiteren kann man „Alt-Schwerin“ auch prima als Basecamp zur weiteren Erkundung des BevölkerungsĂ€rmsten Bundeslands (von Bremen und dem Saarland mal abgesehen) nutzen. Nach Schwerin sind es 70km, nach Rostock ca. 100 und wer mal auf RĂŒgen schauen will (definitiv eine Reise wert !) muss mit ca. 2,5h Fahrt rechnen. Ich denke mal, zu RĂŒgen werd‘ ich noch einen Extra-BlogPost verfassen. Alles in allem war der Urlaub so genial, dass ich gar nicht drum herum komme diese schöne Gegen zu plaggen. Wer Interesse an Adressen o.Ă€. hat, möge sich hier per Kommentar verewigen.

Weitere Impressionen gibts ĂŒbrigens im Flickr Stream meiner werten Gattin, oder in meinem 😉

Tagged with:
Jun 23

Die Konfig hier zu Haus sagt, gehe ĂŒber den Proxy – egal was passiert. Per iptables ist es den Workstations verboten, direkte HTTP-Requests nach draussen abzusetzen. Die werden einfach gedroppt. Damit man jedoch nicht bei jedem neuen Client erst den Proxy eintragen muss, gibt es so schöne Erfindungen wie wpad.dat (aka proxy.pac).

Der DHCP Server im Netz announced also, bei Vergabe einer ip, gleich die URL fuer die Proxy-Autoconf mit. In der Regel klappt das auch alles super. HÀtte nicht jeder Browserhersteller wieder seinen eigenen Kram gebastelt. So interpretiert der Safari auf dem Mac diverse Dinge anders als der Chrome oder der IE. Eine schöne Matrix, mit dem was geht, und was nicht geht, gibt es bspw. bei pacwpad.com.

Die Herausforderung bestand/besteht am Ende darin, den Browsern zu sagen: Hey, du willst was im LAN, dann brauchst Du den Proxy nicht zu fragen. Ansonsten bitte Proxy nehmen. Mit ipv4 kein Thema. Bei ipv6 verschluckt sich der Safari jedoch massivst.

In der folgenden Config bin ich nun soweit, dass Chrome brav das macht was er soll, Safari jedoch bei jeglichen (auch LAN) ipv6-only Websites immer ĂŒber den Proxy geht. Das liegt daran, dass der Safari scheinbar die javascript-Funktion „dnsResolveEx“ nicht kennt. Ohne try/exception macht der immer einen auf „direct“ bei ipv6. Mit diesem Konstrukt geht er zumindest immer auf den Proxy. Bin mal gespannt, wie lange es dauert bis sich die Browserhersteller da geeinigt haben…

Hier also die Config:

  • LANv4 ist 10.0.0.0/24
  • LANv6 ist 2001:999:999:8888/64

function FindProxyForURL(url, host)
{
        if (isInNet(host, "10.0.0.0", "255.255.255.0")) { // ipv4 im LAN ? Dann direct
                return "DIRECT";
        }
        if (host.substring(0, 4) == "127.") { // Localhost ? dann DIRECT
                return "DIRECT";
        }
        if (host.substring(0,16) == "2001:999:999:8888") { // IPv6 Adresse in den Browser eingegeben, und die ist im LAN ? Dann DIRECT
                return "DIRECT";
        }
        try {
            var resolved_ip = dnsResolveEx(host);
            if (resolved_ip.indexOf("2001:999:999:8888")>-1 ) { // Hostname löst auf eine IPv6 auf, die im LAN ist ? Dann DIRECT
                    return "DIRECT";
            }
        } catch(e) { // Funktion "dnsResolveEx" nicht vorhanden ? Dann Fallback proxy
            return "PROXY 10.0.0.2:3128";
        } 
        return "PROXY 10.0.0.2:3128"; // Default: Proxy
}

									

Update: Es empfiehlt sich anstelle der IP (10.0.0.2:3128) den FQDN des Proxies einzutragen. Einige GerĂ€te machen scheinbar einen lookup bevor sie den Proxy fragen. Wenn beim lookup eine V6 Adresse herauskommt, dann lĂ€uft die wpad.dat ins leere, da kein V6-Proxy gefunden wird. Wichtig: der FQDN des Proxies sollte sowohl ĂŒber einen V4-Eintrag (A), als auch ĂŒber einen V6-Eintrag (AAAA) verfĂŒgen, und auch zusĂ€tzlich auf dem V6-Port lauschen…

Tagged with:
Jun 17

So, es ist vollbracht. Die ganzen Consumer-Provider in good ‚ol Germany wollen ja irgendwie nicht so richtig mit ipv6 an den Start kommen. Also habe ich mal selbst Hand angelegt. Einen Provider hat man schnell gefunden. Ich habe mich fĂŒr sixxs.net entschieden.

Bei sixxs.net bekommt man zunĂ€chst einen /64er Block fĂŒr lau zugewiesen, den man hinterher auf /48 upgraden kann (Vorraussetzung: der 64er Tunnel lĂ€uft eine Woche durch / Downtimes, bspw. zum basteln, sind nicht tragisch). Einfach anmelden, „aiccu“ herunterladen, konfigurieren, starten und glĂŒcklich sein. Achtung: Aiccu / sixxs.net prĂŒft die Systemzeit – Ein NTP-Client auf dem lokalen Endpunkt hilft da ungemein !

Das 48er-Subnet benötigt man aber nicht wirklich fĂŒr den Heimgebrauch. Mit dem 64er kann man die restlichen 2^64 Adressen munter im Netz verteilen. Genau da war Anfangs auch mein Denkfehler. Mir war nicht aufgefallen, dass sixxs.net ein Transfernetz zur VefĂŒgung stellt, durch das dass /64er gerouted werden kann. Konkret sieht das ganze nach dem ersten Start wie folgt aus:

  • PtP-Adresse (Da gehts also zu sixxs): 2001:6f8:100:fea::1/128 (Die beiden :: sind die Platzhalter fĂŒr gaaanz viele Nullen – ausgeschrieben sĂ€he das ganze so aus: 2001:6f8:100:fea:0000:0000:0000:1/128)
  • Lokale Adresse des ersten „ipv6“-Interfaces: 2001:6f8:100:fea::2/64
  • Und jetzt wird’s spannend. Im Webinterface bei sixxs.net kann man sehen, dass das zur VerfĂŒgung stehende Netz 2001:6f8:100:dfea::/64 lautet (Man beachte das „d“ bei Octet 7)

Mit dem dfea-Netz (die Adressen sind fĂŒr den Blogeintrag gefaked) können wir nun intern loslurchen und die Rechner ausstatten. Im simpelsten Falle installiert man sich den radvd (Router Advertising Daemon) und konfiguriert sowie startet ihn. Der verteilt die Dinger dann im LAN. Achtung: Dem LAN-Interface muss man selbst eine (v6-)IP aus dem dfea-Netz verpassen (/etc/network/interfaces) – das macht der radvd nicht. Jetzt noch das ipv6-Fowarding enablen (echo 1 >/proc/sys/net/ipv6/conf/all/forwarding) und schon können alle anderen Rechner per ipv6 mit der Welt in Verbindung treten (oder auch angesprochen werden !!)

Was uns zu einem kleinen Schönheitsfehler bringt. Ich will ipv6, weil ich das genNATte und diese ewige dynamische IP-Vergabe leid bin. Dummerweise vergibt der radvd die IP’s aber höchstdynamisch. Statisch verfĂŒgbar wĂ€re in diesem Szenario also allenfalls der Router. Schuld (- Die Diskussion will ich hier nicht fĂŒhren -) sind die sog. „privacy extensions“ die irgendwelche paranoiden Mitmenschen entworfen haben. Ich war schon bei v4 kein Freund von „WĂŒrfel“-DHCP. Ganz abgesehen davon möchte ICH, und nicht irgendein Billo-Router regeln, wer wann wie worĂŒber ins Netz geht. Bei IP’s die man nicht kennt, ist das ein grausames Unterfangen.

Jetzt gibt es zwei Möglichkeiten aus dem Dilemma herauszukommen.

  1. DHCP-V6 aufsetzen (hab ich noch nicht ausprobiert) und die IP’s statisch den Mac-Adressen im LAN zuordnen.
  2. Den Servern hĂ€ndisch statische IP’s verpassen.
  3. Mischbetrieb aus 2 und radvd

Habe mich erstmal fĂŒr Variante 3 entschieden. Also jeden Server abgrasen und eine IP aus dem dfea-Netz eintragen, Default(-v6-)Route setzen und testen. Die Arbeitsplatzrechner bekommen die IP’s per radvd, die Server sind statisch verdrahtet. Fein, funktioniert.

Jetzt kommt der fieseste Teil, an dem ich zwei Stunden versenkt habe:

Das ganze ist bei Debian nĂ€mlich leider nicht Bootfest, da Linux ganz jeck auf Route-Advertisments ist, und sich dort auch eine IP „ziehen“, wenn sie schon statisch eine abbekommen haben. Hier helft eine Kernel-Einstellung in /etc/sysctl.conf:

net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.default.autoconf=0

Die alleine macht aber auch noch nicht glĂŒcklich, da die sysctls beim booten eingelesen werden sollen. Zu diesem Zwecke linkt man sich die /etc/init.d/procps in die runtimelevel-Dirs (/etc/rcX.d/). Hilft auch noch nicht, weil: Die Einstellungen greifen nur, wenn auch das ipv6-Kernel Modul schon geladen ist – sonst laufen die ins leere 🙁 Hierzu ipv6 in die /etc/modules eintragen. Anschliessend booten – et voila: Es lĂ€uft !

Jetzt fehlt eigentlich nur noch eins: Eine ordentliche Firewall mit Connection-Tracking. Gibts wohl demnĂ€chst mal einen Blogeintrag drĂŒber. Soviel sei gesagt: Connectiontracking geht erst ab Kernel 2.6.26, redirect (bspw. fĂŒr transparente Proxies) erst ab 2.6.36…

Somit wÀre dieses Blog nun auch via ipv6 erreichbar !

Tagged with:
Apr 11

Das Kind hat doch derbe Defizite mit dem kleinen 1×1. Macht sich jetzt so richtig bemerkbar, weil im Unterricht Division mit REST durchgenommen wird. Nun habe ich allerdings wenig Lust, mir alle Nasenlang neue Aufgaben aus den Fingern zu saugen. Also mal flux ein Perl-Script geschrieben, welches die Ergebnisse gleich mitliefert. Auf Excel-Output hatte ich gerade keine Lust, sollte aber mit „Spreadsheet::WriteExcel“ (gibts beim CPAN Ihres Vertrauens) auch kein Thema sein.

Das folgende Script wirft also 60 Aufgaben mit 60 Ergebnissen aus. Wenn man den Output (Tab-getrennt) in Excel guttenbergt (CopyPaste), dann hat man auf dem „linken“ Blatt, bei einem 18er Font, die Aufgaben, und auf dem rechten Blatt die Ergebnisse. Die machen es dann etwas leichter, den Kram den der Nachwuchs da hingepinselt hat, zu kontrollieren.

#!/usr/bin/perl
my $i=100;
my @erg,@aufg;
my $sollaufgaben=60;
while ($aufgaben<$sollaufgaben) {
  $i++;
  my $a=int(rand($i)%100);
  my $b=int(rand($i)%10);
  $b=1 if int($b)==0;
  $a=1 if int($a)==0;
  if (int($a/$b)<12) {
    $aufgaben++;
    push @aufg,$aufgaben."\t".$a."\t:\t".$b;
    push @erg,int($a/$b)." R ".($a % $b);
  }
}

for (my $i=0;$i<int($sollaufgaben/2);$i++) {
  print $aufg[$i*2]."\t\t".$aufg[$i*2+1]."\t\t";
  print $erg[$i*2]."\t".$erg[$i*2+1]."\n";
}
									

Tagged with:
Apr 01

Ein wenig herumgespielt mit dem Arduino habe ich ja schon bei dem Rauchmelder und dem BetaBrite-Display. Nicht gebloggt wurde bisher ĂŒber die Funksteckdosen, die derweil per Webserver an- und ausgeschaltet werden können (Dank dieser Library).

Das mĂŒsste doch ansich auch mit dem Garagentoröffner funktionieren. Der tut doch auch auf 433,92MhZ. Letztes Jahr hatte ich mir bei Watterod einen 433er Sender und einen EmpfĂ€nger, der bisher noch nicht zum Einsatz kam, geordert. Den EmpfĂ€nger also fix mal startklar gemacht und an den Arduino angeflanscht. Allerdings ist das auslesen eines Senders, bei dem man keinen Schimmer hat welche Codierung genutzt wird, alles andere als trivial. Habe es dann ersteinmal mit der 433MhZ-Wetterstation von Tchibo probiert. Nach diversen Bitfriemeleien purzelte da dann auch tatsĂ€chlich die Temperatur heraus. Nungut – wir wollen ja einen Garagentoröffner simulieren, nicht Funkthemometer auslesen.

Aus dem ollen Code bin ich allerdings nicht schlau geworden. Hier mal ein oszillografierter Ausschnitt (due to security reasons 🙂 ) des Senders:

Man erkennt insgesamt 3 Arten von Pulsen – kurze, lange und mittlere (WTF ?). Habe erst auf einen Manchester-Code getippt. War mir dann aber irgendwie zu doof den zu analysieren. Also fix mit gtkwave die PulslĂ€ngen in ein Array gepackt, und fertig ist der Garagentoröffner per Arduino. Hier der (Draft !) des Sourcecodes mit dem PulslĂ€ngenarray (Negativ = LOW, Positiv = HIGH):

int garage[45]={  // Block 1 (21 x das gepulse)
               -16382,-16382, // Blocktrenner (2)
               // Block 2 (22 x das gepulse)
};


void setup() {
  pinMode(8,OUTPUT);
  pinMode(13,OUTPUT);
  digitalWrite(8,LOW);
}

void loop() {
  fire(garage,0);          // Garage Toggeln
  digitalWrite(8,LOW);
  digitalWrite(13,HIGH);
  delay(10000);
  digitalWrite(13,LOW);
}

void fire(int what[],int corr) {  // what: PositiverWert: Dauer des HIGHPulses, NegativerWert: Dauer des LowPulses; corr = Korrekturzeit pro Puls
    for (int i=0;i<26;i++) {
      int del=what[i]+corr;
      if (del>0) {
        digitalWrite(8,HIGH);
        delayMicroseconds(del);
      } else {
        del=del*(-1);
        digitalWrite(8,LOW);
        delayMicroseconds(del);
    }
  }
}
									

Fazit: Funktioniert perfekt. Wenn allerdings jemand ’ne Ahnung hat welches Protokoll (bzw. Leitungscode) das sein könnte – immer her damit 🙂

Update 22.08.2012 – Hier, auf Nachfrage, der Sourcecode fĂŒr den Wetterstationsempfang. Das Ding ist echt nur ein „Proof of concept“ – also alles andere als schön. Vom Aufbau her:

  • 433MhZ-EmpfĂ€nger Serial-Out hĂ€ngt an PIN2

-----------------------------------------------------------------------------
/*
  Liest dieses komische Tchibo-Wetterdingens per 433MhZ aus.
*/

boolean cnt=false;
int reader=0;
int cnter=0;
char reading[28];
void setup() {
  Serial.begin(9600);
  Serial.println("go!");
  pinMode(2, INPUT);
 // pinMode(13,OUTPUT);
}

void loop() {
    int LowVal=pulseIn(2,LOW);
    if (LowVal < 11000) {  // Kuezer als 1100ms Low ? Koennte unserer Sensor sein
      if (decodeTime(LowVal) == 'S') {  // Startsequenz ?
        cnt=true;                       // Dann go fuer die Sammlung
        cnter=0;                        // BitCounter auf 0
      }
      if ( (cnter<=27) && cnt && ((decodeTime(LowVal) == '0') || (decodeTime(LowVal)=='1'))) { // Stream noch nicht voll und ein Bit erkannt ?
//       Serial.print(decodeTime(LowVal)); 
       reading[cnter]=decodeTime(LowVal);  // Ab ins Array damit
       cnter=cnter+1;                      // Arraycounter fuers naechste Bit inkrementieren
      }
    } else {
      cnt=false;                           // Zurueck auf Anfang - nix fuer uns.
    }

      if ((cnter==28)) {                   // Arrray Voll ?
        Serial.print('/');
        Serial.print(reading);
        Serial.print('/');
        Serial.println(decodeTemp(reading));
        cnter=0;
        cnt=false; 
      }
  
}

float decodeTemp(String bitstream) {  // Versucht aus dem Bitstrom die Temp. zu berechnen
  int x=0;
  int chk=0;
  for (int i=16;i<24;i++) {      // Extrahiert das Byte zwischen Bit 16 und 24 und packt es als integer in "x"
    if (bitstream[i] == '1') {
      bitSet(x,(23-i));
    }
  }
  for (int i=4;i<15;i++) {      // Kenner aus den 3 Nibbles zwischen Bit 4 und 15 holen (koennte auch der Kanal sein ?)
    if (bitstream[i] == '1') {
      bitSet(chk,(14-i));
    }
  }
  if (chk != 136) {            // Kenner = 136 ? Dann ist es unserer Sensor !
    return(-999);              // Wenn nicht, dann -999 zurueck
  } else {
    return ((float)x/10);
  }
}

char decodeTime(int time){  // Wandelt die Pulse in Bits um.
  if (time > 1500 && time < 11000) { // passendes Signal (zwischen 150ms und 11000ms) ?
        if (time < 2500) {           // kleiner 250ms ? Dann LOW
          return '0';
        } 
        if (time < 5000 && time >3000) {  // Zwischen 500ms und 1000ms dann HIGH
          return '1';
        }
        if (time >8000) {                // Groesser 800ms dann Startsequenz !
          return 'S';
        }
  } else {
    return 'X';
  }  
}
									

Tagged with:
Jan 20

Jetzt weiss ich auch warum netcat das „Schweizer Taschenmesser“ der Netzwerktechnik genannt wird. Gewaltig das Ding.

Doch von vorne – Folgende Ausgangssituation:

Man hat eine Maschine (BOB), die irgendwo hinter einer (SOHO-)Firewall steht. Diese SOHO-Speedport-Dingsdas sind meist so konfiguriert das nix reindarf, aber alles raus. Jetzt möchten wir aber gerne von einer anderen Kiste (die irgendwo im Internet hinter einem etwas eleganter konfigurierten Linux-Router steht, und hier mal ALICE heissen soll) per ssh auf BOB zugreifen. Ferner nehmen wir an, wir hÀtten gerade (temporÀr) Zugriff auf BOB (lokal, wie auch immer) und könnten auch auf ALICE rumtoben.

Problem: Direkt von einem Client hinter ALICE gehts nicht, weil unserer Client (Nennen wir ihn PLUTO – der der hinter ALICE geNATted sitzt) zwar durch ALICE rauskommt, aber an BOB’s SOHO-Router scheitert. WĂ€re doch prima wenn wir irgendwie eine Remoteshell von BOB aus aufmachen könnten. Wir trauen BOB aber nicht, und wollen Ihm auch nicht den SSH-Key/Password fĂŒr ALICE rausrĂŒcken. SSH von BOB nach PLUTO/ALICE ist also doof – Was tun ??

Man nehme: Netcat und Named Pipes. Im einzelnen sieht das dann wie folgt aus:

  1. BrĂŒcke auf ALICE bauen:
    netcat -v -l -p 4711 -c "/bin/nc -l -p 4712"
    ALICE wartet jetzt also auf Port 4711. Alles was sich dort verbindet, wird dann mit einem neuen Listener, der auf 4712 horcht verbunden.
  2. Auf BOB erzeugen wir ein Device (Pipe) damit wir bidirektional den ssh-Datenstrom ins Netcat rein und auch wieder rausbekommen:
    mknod backpipe p
  3. Nun nehmen wir das ganze von BOB aus in Betrieb:
    netcat -vv ALICE 4711 <backpipe |netcat -v localhost 22 >backpipe
  4. Wenn wir auf PLUTO nun ein ssh root@ALICE -p 4712 ausfĂŒhren, sind wir auf BOB angekommen. Voila

Sehr elegant, wie ich finde.

User die auf BOB meinetwegen root-rechte haben und Memdumps machen können, kommen nicht weiter, weil die ja keinen Key oder Ă€hnliches von PLUTO oder ALICE haben, das netcat auf ALICE ist schon dicht mit einer Connection – da kann also auch nichts passieren. Und wir können prima von PLUTO aus auf BOB weiterarbeiten/remote unterstĂŒtzen/whatever bis jemand die Pipe oder den Netcat tötet…

 

Tagged with:
Dez 10


Seit geraumer Zeit sind Rauchmelder in Neubauten ja Pflicht. Macht ja auch durchaus Sinn. Gerade wenn man an solche USV-Aktionen denkt 🙂 Also muss ein Rauchmelder her. Der Otto-Normal-Nerd möchte aber mindestens irgendwas haben, was sich auch in die Standardhaustechnik integrieren lĂ€sst – am besten noch ein Set von mehreren Rauchmeldern. Da gibts es zig Varianten:

  1. Die Billigrauchmelder (um die 5-10 Euro)
  2. Die Billgrauchmelder die per 433MhZ miteinander sprechen (ab 60 Euro im Set mit 4 StĂŒck)
  3. Die teueren Systemrauchmelder die nichts anderes als (2) machen, nur das G*ra oder sonstwas draufsteht.
  4. Die sĂŒndhaft teueren Rauchmelder mit eingebauten GSM-Modul (ab ca. 150 Euro aufwĂ€rts…)

Gelinde gesagt: Alles doof – da es entweder meinen AnsprĂŒchen nicht genĂŒgt, oder massivst zu teuer ist.

Nun denn erstmal Dinge sichten – also ab zum Baumarkt und mal einen Rauchmelder der Kategorie „1“ gekauft. Schimpft sich RM120 und hat schlappe 8,- gekostet. Laut ist das Ding ja, wenn man Zigarettenrauch reinblĂ€st, oder mal den Testknopf drĂŒckt – bringt nur nix, wenn niemand zu hause ist 🙁 Nach dem öffnen des GerĂ€ts, schaut einen ein wenig SMD-Technik (Oha) an, darunter ein IC mit der Aufschrift „CS2105go„. Wie sollte es anders sein, dazu gibts leider kein Datenblatt. Aber Moment, vielleicht ist der CS2105GO-M12 ja Pinkompatibel mit dem MC145010 – Bingo, ist er ! Der MC145010 (manchmal auch MC145012) wird in fast allen Rauchmeldern der Kategorie 1 und 2 (teilweise auch 3) verkauft.

Der aufmerksame Leser merkt was: Bei 2 ist doch eine Vernetzung möglich ! Korrekt, so ist es. Mit anderen Worten: In den Rauchmeldern der Kat.1 ist derselbe IC verbaut, wie in 2, nur das in 1 halt das 433MhZ Modul fehlt. Brauch ich (zumindest jetzt zum Testen) eh erstmal nicht –  doch dazu spĂ€ter. Der MC145010 verfĂŒgt ĂŒber einen sog. I/O Pin, der bei 2er Rauchmeldern dann das 433MhZ-Modul per TTL-High triggert, sobald es qualmt. Beim 1er liegt PIN7 (I/O) tot herum. Perfekt. Also fix den Ground (-) und PIN7 per Kabel rausgefĂŒhrt und an den Arduino geklemmt:

 

Links (Schwarz) die Masse – Also GND direkt mit dem GND des Arduino’s verbinden,

Recht (Rot), etwas fuckeliger, den PIN7 (I/O) des CS2105GO-M12 auf einen Analogen Input-PIN des Mikrocontrollers legen.

Auf dem Arduino selbst habe ich derzeit die gute Wohnzimmerinfo-Anzeige am laufen, da ist also schon ein „Ethernet-Shield“ drauf. Da dort noch diverse Analoge Ports frei sind, und der Rauchmelder auch direkt deben dem Display wohnen soll, also optimal. Vom Code her gestaltet sich das ganze relativ simpel (siehe unten). Das allerfeinste ist jedoch, dass man nichtmal gegen irgendwelche Vorschriften verstösst, wenn man sich anstelle von Variante 1 fĂŒr einen Rauchmelder der Variante „2“ entscheidet. Denn alle Rauchmelder bleiben so wie sie sind (sprich: Die piepen trotzdem). Nur einen, in dem 433MhZ-„Netz“, muss man dann an den Arduino anklemmen. Der verbaute Standalone-RM120 piept ĂŒbrigens auch noch – denn genau dafĂŒr ist PIN7 gedacht: I/O !


#include
#include

#define SmokePIN 0

int Smoke=0;
boolean mailsent=false;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 100 };

void setup () {
Ethernet.begin(mac,ip);
}

void loop() {
// Read Smokedetector
Smoke=analogRead(SmokePIN);

// GGf. RESET der Variable mailsent

if (Smoke > 900) {
if (mailsent==false) {
firemail();
mailsent=true;
}
}
}

void firemail() {
// IP des Mailservers
byte mserver[] = {192,168,0,101};
Client Mail(mserver,25);
if (Mail.connect()) {
Mail.println(„HELO arduino.domain.tld“); /* say hello (statement after helo is needed but irrelevant)*/
Mail.println(„MAIL From: et_brennt@domain.tld“); /* identify sender, this should be the same as the smtp server you are using */
Mail.println(„RCPT To: et_brennt@domain.tld“); /* identify recipient */
Mail.println(„DATA“);
Mail.println(„To: et_brennt@domain.tld“); /* identify recipient */
Mail.println(„Subject: Burning down the House“); /* insert subject */
Mail.println(„WARNING – Smoke detected !“); /* insert body */
Mail.println(„.“); /* end email */
Mail.println(„QUIT“); /* terminate connection */
Mail.println();
Mail.stop();
}
}

Tagged with:
Dez 06

Args. Was ein pfu. Doch von vorne:

Am Freitag letzter Woche ging es los. Meine gute SmartUPS 1500RM hatte auf einmal Hitzewellen. Woher die kamen ? Keine Ahnung. Entdeckt habe ich das ganze eher durch Zufall, da ich ab und an dann doch mal einen Blick ins cacti werfe. Da sah das ganze dann so aus:Hitzewellen in der APC 1500 Interessant in dem Zusammenhang: Die USV wirft erst einen Alert ab ca. 60 Grad Celsius. Meiner Meinung nach – die sollte sich spĂ€ter noch bestĂ€tigen – viel zu spĂ€t. Das Rack, indem sich die APC 1500 befindet, hat ĂŒbrigens direkte AussenbelĂŒftung – im „Serverraum“ waren es also die ganze Zeit ĂŒber so um die 16 Grad. Bei den Peaks bin ich dann doch mal ‚runter gegangen und hab die SchranktĂŒr des Racks aufgemacht, und siehe da: Temp wieder normal.

Am Wochenende stand das gute StĂŒck also erstmal unter Beobachtung. Wie man oben erkennt, war es jedoch ruhig. PĂŒnktlich zum Wochenbeginn fing die USV dann aber wieder an zickig zu werden. Da mir dass ganze (wörtlich !) zu heiss wurde, habe ich mich dann entschlossen das Batterypack (ist in so einer Cartridge) zumindest abzuklemmen. Da die Notstromversorgung Hot (!)-Pluggable ist, also kein Problem.

Sofern die angeschlossenen GerĂ€te in diesem Zustand (Batterien abgezogen / disconnected) noch laufen, sollte man es tunlichst unterlassen der USV den Strom zu klauen. Nicht nur, dass dann alles aus ist – das wĂ€re zu einfach – man bekommt auch keinen Saft wieder auf die USV. Die lĂ€sst sich nĂ€mlich nur mit angepömpelten Akkus starten (FAIL !!).

Also erstmal Ersatzakkus bestellen. Aber € 520,- fĂŒr ’ne Cartridge (RBC24) mit 4 Moppedakkus ? Ja sind die wahnsinnig bei APC ? Das muss doch gĂŒnstiger gehen. Geht es: Diverse HĂ€ndler verkaufen die Akkus einzeln zum StĂŒckpreis von € 20,- . Da die Akkus bisher noch nicht eingetroffen sind, spreche ich da noch keine Empfehlung aus 🙂

Demontage:

Ansich nett gedacht. Frontblende der UPS entfernen, 4 Schrauben lösen und dann einfach die Cartridge mit den 4 Bleigelakkus rausziehen. Was aber tun, wenn die Dinger aufgequollen sind ? Mit Gewalt ziehen, hat geholfen. Hier das Resultat:

Nun „nur noch“ die 4 Akkus aus der Blechwanne entfernen. Haha ! Kein Tutorial, keine versteckte Klammer mit der die Dinger da gehalten werden – nix. FĂŒhlt sich an wie festgeklebt. So war es auch. Jeder Akku ist mit einem dusseligen doppelseitigem Klebestreifen an der Wanne festgeklebt. (2ter FAIL !!) Also auch hier wieder Gewalt anwenden, und die Dinger vorsichtig mit dem Schraubenzieher anhebeln – irgendwann kommen die von alleine 🙂 Der Sicherheit halber, habe ich die AnschlĂŒsse mal zusammengetaped, isoliert, und mit NĂŒmmerchen versehen. Jeder Platz in der Aluwanne hat dann die korrespondierende Nummer bekommen. Jetzt heisst es warten auf die Ersatzlieferung, und hoffen das der Strom nicht ausfĂ€llt.

PS: Vor ca. 6 Jahren ist mir mal eine 750er Desktop-SmartUPS unterm Schreibtisch hochgegangen. War nicht lustig. Die musste ich mit dem Topflappen auf den Balkon befördern… Von daher: Wenn Euch die Akku-Temperatur (Internal Temperature bei APC) komisch vorkommt – lieber heute als morgen die Akkus wechseln.

Tagged with:
preload preload preload