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:
- OS (Raspbian) Updates und upgrades (-> Anleitung)
- ich habe mich dann für Raspbian entschieden : https://www.raspberrypi.org/downloads/raspbian/
- Raspbian Jessie, Debian Version 7.8, Linux-Version 4.1.13+ (total installiert ca. 3.5 GB)
- WLAN Fixe IP einstellen (-> Anleitung)
- NXPPY installation (von github: https://github.com/svvitale/nxppy oder sudo pip install nxppy)
- NFC , NXP - installation (http://www.nxp.com)
- Python und Packages Installation falls notwendig (-> Anleitung)
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)