SMALL - TIME

Nun habe ich nun auch ein RFID - Terminal erstellt.
XAMPP mit SmallTime auf einem Windows - Rechner im LAN dient als Server.
Und mit Rapberry Pi B+ und meinem Handy das über NFC verfügt kann ich Stempeln
Bilder

   

 

Stempel - Terminal - Hardware:
  • Raspberry Pi B+ (oder 2) (ca. 40 Euro)
  • WiPi USB WLAN Dongel (ca. 22 Euro)
  • Adafruit 7" NTSC TFT (ca. 120 Euro)
  • Raspberry Pi 2 NFC Steckkarte (element14 NXP) (ca. 62 Euro)
  • Micro SD Karte 8GB (ca. 6 Euro)

Kommen noch Kabel, Tastatur, Halterungen usw. dazu dürften wir bei etwa 300 Euro liegen, in der Schweiz etwa bei 450 SFr.
Als "Stempelkarten" können normale Mifare NFC Scheckkarten, Anhänger oder Aufkleber verwendet werden. (ca.1 Euro pro Stück)

Installation:
XRDP:

Für die einfachere Bedienung habe ich mir xrdp installiert und die schweizer Tastatur hinzugefügt. (xrdp kann dann mit dem normalen Remotedesktop - Programm von Windows verwendet werden) Schweizer Tastatur: http://www.sero-pcsupport.ch/pcsupport/zuercher-oberland/xrdp-debian-keyboard-layoutu-swiss-german/
Konfiguration und Scripts: 


Ich habe einen Fenstermanager (screen: sudo apt-get install screen) verwendet, damit über Putty (ssh) die Anzeige identisch ist und ich die Python Scripts starten kann und diese bei verlassen von Putty weiter laufen. (ganze Anleitung) (ich habe aber die Datei: /home/pi/.bashrc folgendermassen verändert)

if [ -z $STY ] && [ $TERM != "screen" ]; then
   /usr/bin/screen -xRR;
 else
   /usr/bin/screen -X hardstatus alwayslastline '[%H] %Lw%=%u %d.%m.%y %c '
 fi

Automatischer Script - Start:

Da ich wollte, dass mein Python - Script nach dem Reboot gleich in der bash gestartet wird, habe ich in der Datei (/home/pi/.bashrc) noch folgende Zeile hinzugefügt: 

./start.sh
Inhalt:
sudo python /scripts/stempeln.py

Info: alle anderen Versuche dies in crontab oder /etc/init.d/rc.local schlugen bei mir fehl. Ein Autostart im GUI funktionierte, aber ich wollte ja nur ein Terminal.


automatisch anmelden:

Damit an der Konsole automatisch der Benutzer Pi an der Shell eingeloggt wird, sind folgende Einstellungen nötig:
File: /etc/inittab

1:2345:respawn:/sbin/getty --autologin pi --noclear 38400 tty1
-> Debian Anleitung


Schriftart:

Ich habe die Schriftart in der Konsole bei Raspbian verändert, damit diese grösser ist:
file: /etc/default/console-setup

FONTFACE="Terminus"
FONTSIZE="16x32"

Bildschirm - Standby:

Damit sich der Bildschirm nicht nach 30 Minuten abstellt ist in folgendes nötig:

nano /etc/kbd/config
Änderung in:
BLANK_TIME=0
BLANK_DPMS=off
POWERDOWN_TIME=0

Falls dies nicht hilft, in der Datei : /etc/rc.local
setterm -blank 0 -powerdown 0 -powersave off
hinzufügen.

HDMI - als Standard - Ausgabe verwenden:

Falls die Pi mal vor dem Bildschirm eingeschaltet wird, in folgender Datei ist dies zu ändern: /boot/config.txt (anbei meine config)

# NOOBS Auto-generated Settings:
hdmi_force_hotplug=1
#config_hdmi_boost=4
#overscan_left=24
#overscan_right=24
#overscan_top=16
#overscan_bottom=16
disable_overscan=1
hdmi_group=16
hdmi_mode=28 (die beste Einstellung findet Ihr so wie hier beschrieben : -> Anleitung)
gpu_mwm=128
dtparam=spi=on
#avoid_save_mode=1
start_x=0
device_tree=


-> http://www.gtkdb.de/index_36_2139.html
-> http://elinux.org/RPiconfig

Das Python - Script sieht bei mir in etwa so aus:

Der Code sollte noch optimiert werden, hat aber damals bei meiner Version funktioniert.
z.B. if uid <> '' : wird zu if uid != '' :
immer mit 4 Leerzeichen einrücken (keine Tabulatoren),
anstelle RPI.GPIO ev. pigpio verwenden und Code umschreiben usw.)



import nxppy

mport time

import os, sys

import urllib2, time

terminal = 'http://IhreServerAdresse/terminal.php?rfid='

mifare = nxppy.Mifare()

os.system('clear')

print 'ready to read:'

while True:

try:

uid = mifare.select()

time.sleep(0.1)

if uid <> '':

print ('\033[1;30m' + '-> verbinde mit Server .......' + '\033[1;m')

print ('')

try:

info = urllib2.urlopen(terminal + uid).read()

info = info.replace('Zeit fehlt!', '\033[1;31mZeit fehlt!\033[1;32m')

print ('\033[1;32m' + info + '\033[1;m')

time.sleep(3)

except:

print ('\033[1;31m' + 'Stempel - Fehler!' + '\033[1;m')

time.sleep(1)

pass

else:

print ('\033[1;31m' + 'System- Fehler!' + '\033[1;m')

time.sleep(1)

os.system('clear')

print 'ready to read:'

except nxppy.SelectError:

# SelectError is raised if no card is in the field.

pass

time.sleep(0.1)


Server - nur ein PHP - File:

<?php

$output = '';

if(isset($_GET['rfid'])){

$uri = 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'];

$uri .= $_SERVER['PHP_SELF'];
$uri = str_ireplace('terminal.php','', $uri);
$html = $uri.'idtime.php?rfid='. $_GET['rfid'];
$idtime = file_get_contents($html);
$output .= '-------------------------------------------------------------------'.chr(10);
$html = $uri.'android.php?rfid='. $_GET['rfid']. '&action=getvar&class=_user&var=_name';
$output .= file_get_contents($html);
$output .= '-------------------------------------------------------------------'.chr(10);
$html = $uri.'android.php?rfid='. $_GET['rfid']. '&action=tag';
$output .= file_get_contents($html);
$output .= chr(10).'--------------------------------'. chr(10);
$html = $uri.'android.php?rfid='. $_GET['rfid'];
$output .= file_get_contents($html);
$output .= '-------------------------------------------------------------------'.chr(10);
$output .= 'Saldo Total: ';
$html = $uri.'android.php?rfid='. $_GET['rfid']. '&action=getvar&class=_jahr&var=_summe_t';
$output .= file_get_contents($html);
$output .= chr(10);
$output .= '-------------------------------------------------------------------'.chr(10);

}else{

$output = "Fehler!";

}

echo $output;

?>



alle Files zum Download (hier klicken)