32c3 Wiki online

Das 32c3 Wiki ist nun online. :)
Und wie letztes Jahr gibt es auch dieses Jahr wieder eine Turnhalle zum Übernachten.

Die Preise für die Tickets stehen allerdings noch nicht fest. Ich vermute aber mal, dass es wieder auf den alten Preisen basieren wird.
//Update: 22.11.2015:
Die Tickets für dieses Jahr gibt es hier.

Man sieht sich in Hamburg.

Arduino: Keypad Tasten zuordnen

Wer einmal mit einem Keypad gearbeitet hat, kennt die Situation vielleicht: Man hat einige Pins, aber weiß nicht, wo man welche Pins einstecken soll. Dabei gibt es eine relativ einfach Lösung um die Zuordnung der Tasten im Code anzupassen. Man lädt sich folgenden Code in Arduino rein. Öffnet später dann den Serial Monitor und drückt eine Taste. Nun sieht man welche Taste man angezeigt bekommt. Stimmt diese nicht mit der gedrückten Taste überein, muss die Taste an der entsprechenden Stelle im "keys[ROWS][COLS]" Array angepasst werden.
Ist man mit allen Tasten durch, lädt man den aktualisierten Code nochmal auf den Arduino und prüft erneut die Angabe.

Die Keypad Lib ist die Standardlib von Arduino. Wenn ihr irgendwann mal etwas mit dem offiziellen GSM Modul von Arduino und einem Keypad machen wollt, sei dieser Thread empfohlen. Dann sind nämlich Anpassungen an der Keypad Lib notwendig.

#include 
#include 
#include 

//Keypad Deklaration
const byte ROWS = 4; 
const byte COLS = 4; 
char keys[ROWS][COLS] = {
  {'D','C','B','A'},
  {'#','9','6','3'},
  {'0','8','5','2'},
  {'*','7','4','1'}
};

//Keypad PINS.
byte rowPins[ROWS] = {2,3,4,5}; //connect to row pinouts 
byte colPins[COLS] = {6,7,8,9}; //connect to column pinouts
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void Keyeingabe()
{
    char key = keypad.waitForKey();    
    Serial.println(key);
}

void setup() 
{
    Serial.begin(9600); //Für Debugging notwendig.
    
}

void loop() 
{   
    Keyeingabe();
}

//Hinweis: Wegen HTML muss die letzte Zeile und die #include Zeilen beim Kopieren angepasst werden. Der Code zeigt aber schon mal schön, wie es funktioniert. :)

Arduino: GSM Modul und Keypad zusammen macht Probleme

So dele, seit Anfang diesen Jahres bastle ich mehr oder weniger regelmäßig in meiner Freizeit an einem "Schloss" für ein Baumhaus.
Die Idee: Der Arduino bekommt vom Webserver einen Code als SMS gesendet, der ausgewertet wird. Die SMS enthält ein bisschen Text (geheimer Prefix! Aus Securitysicht natürlich ein Witz. :) ) und hinterher dann den Code. Dieser Code ist dann solange gültig, bis irgendwann eine Lösch SMS kommt. Der Code wird via Keypad eingegeben: Ist der Code richtig, öffnet sich ein Relais und damit das Schloss.
Sobald aber nun ein Code drin ist, ist der Arduino im "Code Eingabe" Modus und leider gibt es keinen Interrupt vom GSM Modul, der mir mitteilen würde, dass gerade eine SMS gekommen ist.
Deshalb hängt sich der Arduino regelmäßig auf und nach ein paar Mal testen kann das Modul keine SMS mehr empfangen. Sprich die Idee ist zwar eigentlich nicht schlecht, aber momentan viel zu unzuverlässig.

Das kann nun an mehreren Sachen liegen:
1. Die Hardware ist doof. (Würde ich aber fast mal ausschließen wollen, da es selbst mit einem Original Arduino nicht zuverlässig funktioniert!)
2. Ich hab einen Mist programmiert (dabei hab ich die logischen Dinge schon in Funktionen ausgelagert, damit sie nur dann aufgerufen werden, wenn es explizit erforderlich ist)
3. Das GSM macht generell zu viele Probleme.

Vermutlich eine Mischung aus allen 3 Punkten + X!

Irgendwann stelle ich vielleicht den Code nochmal online. Muss dazu aber noch ein paar Dinge wie PIN und Prefix entfernen!

Aber es gibt ja noch andere Ideen: Man nimmt statt einem GSM Modul ein RTC Modul, mit dem man immer ein aktuelles Datum hat. Anhand vom Datum kann man einen Code generieren (ein paar Mal multiplizieren, damit es nicht ganz so offensichtlich ist.) und einem Teil für die Anzahl der Tage. Hinterher kann dann der Besucher einmal den Code eingeben und er wird solange gültig sein, bis irgendwann die Anzahl der Tage überschritten wurde. Das sollte relativ einfach und zuverlässig funktionieren. Der Code Generierungsalgorithmus ist dann einmal auf dem Arduino und einmal auf dem Webserver. Beide sollten gegen Reverse Engineering einigermaßen sicher sein. Zumindest vom Arduino fällt mir gerade keine einfach Methode ein.

Alternative 2: Man generiert einen QR-Code und liest diesen dann per Kamera an einem Raspberry Pi aus. Das hätte auch Stil und wäre bequem. Wie zuverlässig es funktioniert bleibt mal dahin gestellt. Wenn ich ab und an mal ein Paket bekomme, dass in der Packstation gelagert wird war es oft mühselig den normalen Barcode erfolgreich einscannen zu lassen. Aber wahrscheinlich hab ich es nur nicht im richtigen Winkel hingehoben oder bin einfach zu doof. Nach Quadrilliarden Versuchen hat es aber dann doch immer geklappt. ;)

Soviel mal zu diesem Thema. Näheres dann, wenn alles klappt. Den Code werde ich dann vermutlich mal einscannen. Den Algorithmus aus Gründen der nationalen Sicherheit natürlich nicht! Das dürfen findige Hacker selbst herausfinden! So schwer wird es aber nicht sein.

Ganz aufgeben möchte ich das GSM Modul noch nicht. Denn zumindest der SMS Versand funktioniert recht zuverlässig. Also könnte man diese Funktion in Form einer Alarmsicherung mit Reedkontakt noch gut verwenden! Jetzt muss aber erstmal ein funktionerendes Schloss her, danach sehen wir weiter! Der Rest ist eher nettes Beiwerk!

Als dritte Alternative kann man sich auch einfach "Android meets Arduino" ansehen. Die Smartphones sind nicht mehr teuer und haben schon einiges an Sensoren dabei, da wäre es ganz nett wenn man diese auch nutzen könnte.