Einen lokalen Blynkserver beim Booten der Raspberry PI Starten

In diesem Beitrag wird am Beispiel eines lokalen Blynk Servers gezeigt, wie auf einer Raspberry PI eine Java File beim Starten und Herunterfahren der PI automatisch gestartet und heruntergefahren werden kann.

  1. Zuerst wird ein Startscript und ein Stopscript erstellt, die später die Applikation mir Rootrechten startet und stoppt. Hier für wechseln wir mit sudo bash unsere Benutzerrechte auf Root.In unserem Beispiel speichern wir die Scripte im Verzeichnis /usr/local/bin/…
  • Start Script: /usr/local/bin/startBlynk.sh
  • Stop Script: /usr/local/bin/stoppBlynk.sh

Nach dem erstellen der Scripte müssen noch deren Attribute auf ausführbar gesetzt werden. Dies geschieht mit dem Befehl chmod +x NAME

Zu Starten des BlynkServers kann der Inhalt des Scripts startBlynk.sh im einfachsten Fall so aussehen:

#!/bin/bash
/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/bin/java -jar /home/pi/Blynk/server-0.39.10.jar -dataFolder /home/pi/Blynk &

Zu Stoppen des BlynkServers kann der Inhalt des Scripts stoppBlynk.sh im einfachsten Fall so aussehen:

#!/bin/bash
#sucht und beendet die Java Applikation
ps auxf |grep ’server-0.xx.x.jar ‚|`awk ‚{ print „kill “ $2 }’`

Als nächstes benötigen wir noch das folgendes Script (localBlynk) , wir speichere es in das Verzeichnis /etc/init.d/localBlynk

  • sudo nano /etc/init.d/localBlynk
  • Inhalt der Date:#! /bin/sh
    ### BEGIN INIT INFO
    # Provides:        localBlynk
    # Required-Start:
    # Required-Stop:
    # Default-Start:        2 3 4 5
    # Default-Stop:         0 1 6
    # Short-Description:    Stars & Stops BlynkServer
    # Description:          Stars & Stops BlynkServer
    ### END INIT INFO

 

# Start Stop Blynk local Blynk Server

case $1 in
start)
/bin/bash /usr/local/bin/startBlynk.sh
;;
stop)
/bin/bash /usr/local/bin/stopBlynk.sh
;;
restart)
/bin/bash /usr/local/bin/stopBlynk.sh
/bin/bash /usr/local/bin/startBlynk.sh
;;
esac
exit 0

  • Um das Script zum Systemstart hinzu zu fügen, führen wir nun noch  folgende Kommandos aus:cd /etc/init.d/
    sudo chmod 755 localBlynk
    sudo update-rc.d localBlynkdefaults

 

Einen eigenen lokalen Blynk Server auf dem Raspberry PI installieren

Logen Sie sich auf ihrer Raspberry z.B. per ssh ein.

Nun wird die aktuelle Java Version (Java 8) installiert :

sudo apt-get install oracle-java8-jdk

Stellen Sie sicher, dass nun die aktuelle Java Version installiert wurde.

java -version
Output: java version "1.8.0_40"

Download des Blynkserver jar Files in das „/home/pi/Blynk Verzeichnis.
Sollte das Verzeichnis noch nicht existiert muss es zuerst angelegt werden.

Alle folgenden „sudo“ Anweisungen kann man sich sparen, wenn man gleich in den „sudo bash“ wechselt, dies ist vergleichbar mit dem „su“ bei anderen Linux Distributionen.

pwd
/home/pi/
sudo mkdir Blynk
cd Blynk
sudo wget "https://github.com/blynkkk/blynk-server/releases/download/v0.39.10/server-0.39.10.jar"

Es ist auch möglich,  die Server Datei manuell via ssh oder scp herunter zuladen und in das entsprechende Verzeichnis hinein zu kopieren .

Um den Mailversand zu aktivieren, muss im Verzeichnis /home/pi/Blynk eine Datei mit dem Namen mail.properties angelegt werden.

Der Inhalt dieser Datei hat folgendes Format.

mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.host=smtp.gmail.com
mail.smtp.port=587
mail.smtp.username=Anmeldename
mail.smtp.password=Kennwort

Die aktuelle Blynk Server Version ist unter:
https://github.com/blynkkk/blynk-server/releases
zu finden.

  • Server mit den default Einstellungen starten (Hardware Port 9443 SSL)
    sudo java -jar server-0.39.10.jar -dataFolder /home/pi/Blynk        
    
  • Als Rückmeldung des Servers erscheint eine Meldung wie diese :
    Blynk Server successfully started.
    All server output is stored in current folder in 'logs/blynk.log' file.
    

Aktiviere automatischen Server Neustart

Um diese Option zu aktivieren, suchen Sie das Verzeichnis:
/etc/init.d/rc.local
öffnen sie die Datei mit dem vi Editor und fügen sie die folgende Zeile hinzu:

sudo vi rc.local
java -jar /home/pi/Blynk/server-0.39.10.jar -dataFolder /home/pi/Blynk &

Sollte dieser Ansatz nicht funktionieren, versuche Sie bitte folgendes:

sudo crontab -e

und fügen sie die folgenden Zeilen hinzu

    @reboot java -jar /home/pi/server-0.39.10.jar -dataFolder /home/pi/Blynk &

anschließend speichern und beenden.

Der Administrationsbereich kann anschließend bei laufendem Blynk Server mit folgender URL im Browser geöffnet werden.

https://your_ip|(127.0.0.1):9443/admin

Um den Blynkserver im Lokalen Netzwerk auch über das Internet erreichen zu können wird der Einsatz einer DynDNS Adresse empfohlen. Diese kann dann z.B. in einer Fritzbox hinterlegt werden, ändert sich die IP-Adresse der Fritzbox (alle 24 Stunden veranlaßt durch den Provider), wird automatisch die DynDNS Adresse informiert und der Server ist somit immer mit einem Pseudo Domain Name erreichbar.
In lokalen Router müssen außerdem noch ein paar Portfreigaben definiert werden. EIn Auszug der wichtigsten Einstellungen ist hier zu sehen.

 

Viele weitere Informationen zur Konfiguration der Blynk Servers.

Mathe signifikante Stellen wie gehts …

Die erste signifikante Stelle einer Zahl ist die erste Zahl ungleich 0.

Wenn wir davon ausgehen, dass jede Zahl mit führenden und nachfolgenden Nullen geschrieben werden kann, wie hier in diesem Beispiel zu sehen ist,

…..000000000000000009732,34555000000000000000….

ist die erste Zahl, die NICHT Null ist, also die „9“ die ERSTE Signifikante Ziffer.

Danach wird einfach gezählt:
9732,345550000000000 ….
123456789 daraus folgt, neun signifikante Stellen!

So lautet die Zahl auf drei signifikante Stellen gerundet nun

9730

Würde zum Beispiel die Folgende Zahl da steht: 2100004, dann wären die ersten drei signifikanten Ziffern: 210.

Es werden also wie im Beispiel nur die ersten drei Stellen, die nicht Null sind abzählen und auf die n-te Stelle gerundet.

ESP8266 mit der Arduiono IDE Programieren

Ich hab mich in den letzten Tagen mal etwas intensiver mit dem Thema Datashet ESP8266 beschäftigt. Dieses Modul geistert in letzte Zeit immer häufiger durch die Fachpresse und das zu Recht. Es handelt sich hierbei um ein kleines WIFI – Modul, dass recht einfach seriell an jeden beliebigen Mikrocontroller Type angeschlossen werden kann.Der Datenaustausch erfolgt über AT-Komandos ähnlich wie man sie von anderen seriellen Kommunikationen kennt.

Das interessante bei diesem Modul ist jedoch, dass man im Prinzip auf einen zusätzlichen Mikrocontroller verzichten kann, denn der ESP8266 verfügt selbst über bis zu 4 MB Flash und 11 GPIO’s bei 80 MHz.

Das Modul ist in verschiedenen Board-Typen erhältlich, hierbei sind meist unterschiedlich viele der GPIO Pins herausgeführt. Auf allen Breakouts sind jedoch minimal 4 (Rx (GPIO 3) und Tx (GPIO 1) , VCC und VSS).

Die Programmierung des ESP kann sehr einfach mit der Arduino IDE erfolgen

Hierbei stehen mehrere Möglichkeiten zur Verfügung:

Auf GitHub steht eine eigenständige Version der Arduiono IDE ESP8266 zum download zur Verfügung , die bereits über alle nötigen Librarys verfügt, jedoch nicht immer auf dem aktuellsten Stand ist.

Die zweite Alternative besteht darin,  eine bereits vorhandene (installierte) original Arduiono IDE um die Hardware Library zu erweitern. Diese steht ebenfalls auf GitHub zur Verfügung.

Die dritte und einfachste Möglichkeit, einfach in den Voreinstellungen der Arduiono IDE Zusätzliche Boardverwalter den folgenden Link eintragen:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Anschließend wird unter Werkzeuge – Board – Board Verwalter… das Paket „ESP8266 Comunity“ ausgewählt und installiert. Um eine neue Version zu installieren kann dann die Updatefunktion des Pakets verwendet werden.

Soll das Package von Hand eingebunden werden, muss vorher die ZIP-Datei herunter geladen und entpackt werden.Im entpackten Ordner befindet sich neben den Git-Dateien auch der Ordner esp8266com. Dieser wird nun einfach in den Arduino-Ordner ../Dokumente/Arduino/hardware verschoben, dort befinden sich unter anderem dann auch zusätzliche neu Sketche Dateien, wie z.B.

  • ESP8266WebServer
    Ein einfaches Hello World Programm für die Serverfunktion
  • ESP8266mDNS
    Server mit mDNS (gerätename.local)
  • ESP8266WiFi
    Verschiedene Sketche: Scanner, Server, Clients sowie ein NTP-Client (Zeitsynchronisation über das Internet).

Nach dem starten der Arduiono IDE müssen nun noch ein paar Voreinstellungen getroffen werden. In der Boardauswahl befindet sich nun eine neue Kategorie, in der nun auch das Generic ESP8266 board zu finden ist, diese muss ausgewählt werden um z.B. ein ESP-01 Modul zu programmieren.Verwenden Sie für einen ersten Test z.B. aus den Beispielen den Hello Server-Sketch. Die Syntax ist Arduinokonform und die Programmierung sehr einfach, da alles eigene Librarys hat und die Kommunikation intern und nicht von einem Arduino nur mit AT-Kommandos über die serielle Schnittstelle geschieht.

Zum Programmieren mit dem ESP – Tool muss man das ESP-Modul wie folgt anschließen:
Achtung, keines der ESP Signale ist 5V tolerant!
  • SC_PD/CHIP_EN auf VCC
  • Tx und Rx über Kreuz an ein USB-Serial Modul.
  • VCC an 3,3V
  • GND mit der Masse verbunden.
  • GPIO0 zum Programmieren auf Masse.
  • RST kann offen bleiben oder ein PullUp (10k) eingebaut werden.
Das ESP Modul kann direkt vom USB Seriell Adapter versorgt werden, sofern dieser eine Ausgangsspannung von 3,3V unterstützt.
Einige Adapter bieten die Möglichkeit die Betriebsspannung zwischen 5V und 3V3  aus zu wählen. Hierbei ist dringend darauf zu achten, dass diese Einstellung nicht nur die VCC sondern auch die Datenpegel betrifft.

Programmierung

Nach dem erfolgreichen Kompilieren des Codes kann der Upload in das ESP – Modul erfolgen. In älteren IDE Versionen musst für den Upload in das Modul das „esptool“ aus der Liste der Programmer aus ausgewählt werden. Dies ist in den neueren Versionen nicht mehr vorhanden, da der Upload nun eine Uploadmethode ausgewählt wird. Nach dem die Übertragungsparameter im Menü Werkzeuge eingestellt wurden, kann der Upload anschließend im Menüpunkt Sketch Upload initiiert werden.
Sollte der Upload abbrechen,  ist der ESP vermutlich nicht im Standard Bootloader Modus. Hierfür muss der GP0 auf LOW gelegt sein und ein Reset ausgeführt werden. Nach dem erfolgreichen Programmieren startet das Programm anschließend unabhängig vom Pegel an GP0.

Firmware Update

Bei der Programmierung des ESP Moduls mit der Arduino IDE, wird die auf dem Modul vorhandenen Firmware automatisch überschrieben.

Soll das ESP – Modul nach dem Arbeiten mit der Arduino IDE wieder mit der original Firmware des Herstellers programmiert werden, kann hierfür das ESP Flash Tool verwendet werden, dass die Firma Espressif zur Verfügung stellt.Nach dem starten der Applikation ist folgendes Fenster zu sehen.

esp01 Firmware

 

Espressif stellt auf seinen Seiten ebenfalls die aktuellen Firmware zum Download zur Verfügung.
Für den Download drücken sie auf SDKs Downloads und dann wählen Sie das letzte Release aus.

Der Hersteller hat eine optionale Funktion in das Modul integriert, das ein automatisches Update direkt vom Hersteller erlaubt. Standardmäßig ist diese Funktion jedoch abgeschaltet.

Pic Basic Smple SD Card FAT32

Mit dem hier vorgestellten Pic Basic Pro Samplecode ist es möglich eine SD Karte, die vorher mit FAT 32 formatiert wurde zu lesen und zu beschreiben.

Das Beispiel stammt aus dem Fundus der der Firma Melab
Copyright 2008 microEngineering Labs, Inc.

PIC Basic, Read/Write SD Card with FAT 32
PIC Basic, Read/Write SD Card with FAT 32
sdfs3.zip
Version: Copyright 2008 microEngineering Labs, Inc.
1.5 KiB
543 Downloads
Details

SDCardInterface

' Name        : sdfs3.pbp
' Compiler    : PICBASIC PRO Compiler 2.6 (PBPL only)
' Assembler   : MPASM
' Target PIC  : PIC16F4550
' Hardware    : Schematic available in http://melabs.com/resources/samples/pbp/sdfs3.zip
' Oscillator  : 20MHz
' Keywords    : SD Card, SD/MMC, FAT16
' Description : 10/02/08 - PICBASIC PRO 2.50L test program to talk to FAT16
' formatted MMC/SD cards with PIC18F4550.  This is only a test program that
' is part of a larger project.  The complete fileset with schematic, includes,
' and details can be found at download:
' http://melabs.com/resources/samples/pbp/sdfs3.zip

Define    OSC    20    ' 20 MHz oscillator

' Alias PIC pins and registers for SD/MMC card
SD_WE        Var    PORTA.4    ' SD card write protect
SD_WE_TRIS    Var    TRISA.4    ' SD card write protect direction
SDI        Var    PORTB.0    ' SPI data in
SDI_TRIS    Var    TRISB.0    ' SPI data in direction
SCL        Var    PORTB.1    ' SPI clock
SCL_TRIS    Var    TRISB.1    ' SPI clock direction
SD_CS        Var    PORTB.3    ' SD card chip select
SD_CS_TRIS    Var    TRISB.3    ' SD card chip select direction
SD_CD        Var    PORTB.4    ' SD card detect
SD_CD_TRIS    Var    TRISB.4    ' SD card detect direction
SDO        Var    PORTC.7    ' SPI data out
SDO_TRIS    Var    TRISC.7    ' SPI data out direction

' Include the SD/MMC subroutines (found in http://melabs.com/resources/samples/pbp/sdfs3.zip)
Include "SDFS.PBP"
SDC_UseHardSPI = TRUE    ' Use hardware SSP port for SPI.

ADCON1 = 15        ' All I/O pins digital
Pause 100

' FSInit initializes the card and reads all the preliminary information from it
Gosub FSInit
Serout2 PORTC.6, 84, ["Init: ", Dec FAT_error, " ", Dec SDC_status, " ", Dec SDC_response, $d, $a]
If (FAT_error != 0) Then Stop

' Display card directory
Gosub FINDfirst        ' Find first file on card
While (FAT_error = 0)
Serout2 PORTC.6, 84, [Str FAT_FileName\11, $d, $a]
Gosub FINDnext    ' Find next file on card
Wend

' This section defines a specific short (8.3) filename
'  Note that spaces are use in empty elements and must be upper case for Windows
FAT_FileName[0] = "T"
FAT_FileName[1] = "E"
FAT_FileName[2] = "S"
FAT_FileName[3] = "T"
FAT_FileName[4] = "1"
FAT_FileName[5] = " "
FAT_FileName[6] = " "
FAT_FileName[7] = " "
FAT_FileName[8] = "T"
FAT_FileName[9] = "X"
FAT_FileName[10] = "T"

' Set file time to 8:30:10 and date to 1/1/2008
FAT_seconds = 5
FAT_minutes = 30
FAT_hours = 8
FAT_day = 1
FAT_month = 1
FAT_year = 28

' Open a file for write
FAT_mode = "w"        ' Write mode
Gosub FSfopen        ' Open file pointed to by Byte array FAT_FileName
Serout2 PORTC.6, 84, ["Open for write: ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Write to file
FAT_src[0] = "A"
FAT_src[1] = "B"
FAT_src[2] = "C"
FAT_count = 3
Gosub FSfwrite
Serout2 PORTC.6, 84, [ "Write ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Close file
Gosub FSfclose
Serout2 PORTC.6, 84, [ "Close ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Open a file for read
FAT_mode = "r"        ' Read mode
Gosub FSfopen        ' Open file pointed to by Byte array FAT_FileName
Serout2 PORTC.6, 84, ["Open: ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Read and display the whole file
FAT_count = 1        ' Read 1 byte to buffer at a time
Gosub FSfread
While (FAT_error = 0)
Serout2 PORTC.6, 84, [FAT_dest[0]]
FAT_count = 1    ' Read 1 byte to buffer at a time
Gosub FSfread
Wend
Serout2 PORTC.6, 84, [ "Read: ", Dec FAT_error, $d, $a]

' Delete a file
'    Gosub FSremove        ' Delete file pointed to by Byte array FAT_FileName
'    Serout2 PORTC.6, 84, ["Remove: ", Dec FAT_error, $d, $a]
'    If (FAT_error != 0) Then Stop

' Rename a file
' FAT_FileName2 is new name
'    FAT_FileName2[0] = "T"
'    FAT_FileName2[1] = "E"
'    FAT_FileName2[2] = "S"
'    FAT_FileName2[3] = "T"
'    FAT_FileName2[4] = "2"
'    FAT_FileName2[5] = " "
'    FAT_FileName2[6] = " "
'    FAT_FileName2[7] = " "
'    FAT_FileName2[8] = "T"
'    FAT_FileName2[9] = "X"
'    FAT_FileName2[10] = "T"
'    Gosub FSrename        ' Rename file pointed to by Byte array FAT_FileName
'    Serout2 PORTC.6, 84, ["Rename: ", Dec FAT_error, $d, $a]
'    If (FAT_error != 0) Then Stop

End

 

NMEA nach Dezimalgrad umrechenen und als KML-Datei für Google Earth zusammenbauen

Um die Daten eines GPS Empfängers z.B. in Google Earth anzuzeigen benötigt Google Earth die Daten als XML Datei. Die Dateiendung dieser XML Datei lautet „.KML “

In Folgenden finden Sie ein Beispiel für den Aufbau einer solchen Datei mit einer Track (Wegeanzeige), hierbei wird eine Textur 10 Meter über den Weg nach oben gezogen, um einen besseren Überblick zu erhalten:

<?xml version="1.0" encoding="UTF-8"?>
  <kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>KmlFile</name>
    <Style id="transPurpleLineGreenPoly">
    <LineStyle>
    <color>7fff00ff</color>
       <width>4</width>
       </LineStyle>
       <PolyStyle>
         <color>7f00ff00</color>
       </PolyStyle>
    </Style>
    <Placemark>
       <name>Absolute</name>
       <visibility>1</visibility>
       <description>Dillinger-Engineering</description>
       <styleUrl>#transPurpleLineGreenPoly</styleUrl>
       <LineString>
          <tessellate>1</tessellate>
          <altitudeMode>relativeToGround</altitudeMode>
          <coordinates>
            10.8665686666667,49.4601001666667,10
            10.8665698333333,49.4601003333333,10
            10.8665793333333,49.4601003333333,10
            10.8665775,49.4601003333333,10
            10.866586,49.460101,10 
            10.8665888333333,49.4601011666667,10
            10.8665971666667,49.4601015,10 
            10.8665971666667,49.4601015,10
         </coordinates>
       </LineString>
    </Placemark>
  </Document>
</kml>

Von einem GPS Empfänger werden die Daten meist im NMEA Format übertragen. Für eine reine Positionsbestimmung genügt der Daten String „Recommended Minimum Sentence C“ (RMC)
Jeder GNSS-Empfänger muss mindestens den Recommended Minimum Sentence C (empfohlener Mindestdatensatz C, RMC) Datensatz ausgeben können, maximal alle zwei Sekunden.
Er folgt folgendem Aufbau:
Seit NMEA In 2.3, wurden folgende Sätze um ein Feld erweitert (APB, BWC, BWR, GLL, RMA, RMB, RMC, VTG, WCV und XTE) das die Signalintegritätsinformation laut FAA darstellt. („F“ in untenstehender Tabelle)

$GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
$GPRMC,HHMMSS,A,BBBB.BBBB,b,LLLLL.LLLL,l,GG.G,RR.R,DDMMYY,M.M,m,F*PP

Symbol
Bedeutung
HHMMSS
oder
HHMMSS.SSS
Zeit (UTC)
A Status (A für OK, V bei Warnungen)
BBBB.BBBB Breitengrad
b Ausrichtung (N für North, nördlich; S für South, südlich)
LLLLL.LLLL L ängengrad
l Ausrichtung (E für East, östlich; W für West, westlich)
GG.G Geschwindigkeit über Grund in Knoten
RR.R Kurs über Grund in Grad bezogen auf geogr. Nord
DDMMYY Datum (Tag Monat Jahr)
M.M magnetische Abweichung (Ortsmissweisung)
m Vorzeichen der Abweichung (E oder W)
F Signalintegrität :
A = Autonomous mode,
D = Differential Mode,
E = Estimated (dead-reckoning) mode
M = Manual Input Mode
S = Simulated Mode
N = Data Not Valid
PP Hexadezimale Darstellung der Prüfsumme
(Die Prüfsumme ergibt sich durch eine XOR-Verknüpfung aller Daten-Bytes zwischen (jeweils exklusive) dem Dollar-Zeichen ‚$‘ und dem Stern ‚*‘.)

Um aus den selektierten Lat und Lon Daten den Dezimalgrad zu extrahieren kann folgende Pascal Funktion verwendet werden.

function GMSToDC(Str, Direction : String): String;
{Convert NMEA latitude & longitude to decimal
Here's how you convert latitude & longitude obtained from NMEA's GPGGA to decimal:
N              NMEA             Decimal
latitude       0302.78469    03 + (02.78469/60) = 3.046412
longitude     10141.82531    101 + 41.82531/60) = 101.6971
Notice that for latitude of 0302.78469,
03 ==> degress. counted as is
02.78469 ==> minutes. divide by 60 before adding to degrees above
Hence, the decimal equivalent is:
03 + (02.78469/60) = 3.046412 }
Var Grad, MinSec , DC: Extended;
begin
   if Length(Str)=10 then //BBBB.BBBBB     Breitengrad
   Begin 
      Grad:= StrToInt(Copy(Str,1,2));
      delete(Str,1,2);
   end
   else                 // LLLLL.LLLLL     Längengrad
   Begin
      Grad:= StrToInt(Copy(Str,1,3));
      delete(Str,1,3);
   end;
   while Pos('.', Str) > 0 do      // Ersetze den Punkt durch ein komma
   Str[Pos('.', Str)] := ',';
   MinSec:= StrToFloat(Str)/60;
   DC:= Grad + MinSec;
   if (Direction='S') or (Direction='W') then
      DC := -DC;
   Result:= FloatToStr(DC);
   while Pos(',', Result) > 0 do
   Result[Pos(',', Result)] := '.';
end;

  Das Zusammenbauen der KML-Datei erfolgt hier:

Procedure NMEAToKML(VarStringList:TStringList;Name:String;NMEAArray:array of TNMEA);
Var I    : Integer;
Begin
  StringList.Add(''+#13#10+'<kml xmlns="http://www.opengis.net /kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2"xmlns:atom="http://www.w3.org/2005/Atom">'+#13#10+
  '<Document><name>'+Name+'</name>'+#13#10+
  '<Style id="sn_ylw-pushpin">'+#13#10+
  '<IconStyle><scale>1.1</scale><Icon>'+#13#10+ 
  '<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png'+#13#10+
  '<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>'+#13#10+
   '<LineStyle><color>7f0000ff</color><width>5</width>  </LineStyle>'+#13#10+
  '<PolyStyle><color>7f0000ff</color></PolyStyle></Style>'+#13#10+
  '<StyleMap id="msn_ylw-pushpin"><Pair><key>normal</key>  <styleUrl>#sn_ylw-pushpin</styleUrl></Pair>'+#13#10+
  '<Pair><key>highlight</key><styleUrl>#sh_ylw-pushpin</styleUrl></Pair></StyleMap>'+#13#10+
  '<Placemark><name>'+FStopWatch.VeranstaltungsInfo+'#msn_ylw-pushpin1'+#13#10+
  '<tessellate>1</tessellate><altitudeMode>relativeToGround</altitudeMode><coordinates>');
  For I:= Low(NMEAArray) to High(NMEAArray) do
  StringList.Add(GMSToDC(NMEAArray[I].Lon, NMEAArray[I].NS)+ ',' +
  GMSToDC(NMEAArray[I].Lat, NMEAArray[I].EW) + ',10');
  StringList.Add(''+#13#10+
  '</LineString>'+#13#10+
  '</Placemark>'+#13#10+
  '</Document>'+#13#10+
  '</kml>');
end;

1. Cadolzburger Kettcar Rennen

1. Cadolzburger Kettcar Rennen Gesamtwertung

1. Cadolzburger Kettcar Rennen Urkunden

Am 27.12.2015 war es endlich so weit, meine beiden Söhne wollten schon seit längerem mit ihren Freunden ein Kettcar Rennen veranstalten und die anhaltend milde Witterung gestatte es uns dies auch noch im Dezember zu tun.

So wurden kurzerhand mit der Urkunden Druckerei der StopWatch Software Plakate erstellt und in der gerammten Nachbarschaft verteilt, damit auch möglichst viele Teilnehmer dabei sein konnten.

20151227_1. Cadolzburger Kettcar Rennen Flyer

Am Sonntag Vormittag begannen dann endlich die Vorbereitungen. Es wurde eine Leutze Laserlichtschranke installiert und mit der neu entwickelten Interface Platine an den Zeitmess PC angeschlossen.

20151227_Kettcar Rennen Cadolzburg (5)

Auch eine DMX Ampel und ein zweiter Monitor durfte nicht fehlen, die den Teilnehmern das Startsignal und den Zuschauern die entsprechenden Renninformationen lieferten.

20151227_Kettcar Rennen Cadolzburg (9)

Zu guter letzt organisierte mein großer Sohn noch eine aktive Lautsprecherbox mit einem USB Stick und der passenden Musik, sowie ein Mikrofon für Durchsagen und die geplante Siegerehrung.

Das Rennen begann wie geplant mit den Kettcars und jeder fuhr mehrere Runden um sein Bestzeit zu toppen.
Nach einer Stärkung mit Getränken und Kuchen ging es in die nächsten Runden, nach dem Kettcar wurde so ziemlich alles gefahren was Räder hatte bis am Ende die Stecke noch im Dauerlauf absolviert wurde.

20151227_Kettcar Rennen Cadolzburg (11)

Die Kids waren voll in ihrem Element, leider war die anschließende Auswertung dann umso schwieriger.
Deshalb hatten wir beschlossen die Ergebnisse in Altersgruppen ein zu teilen und egal wie die Bestzeit entstanden ist diese zu werten.

Es gab drei Gewinner, die bei der Preisverleihung alle einen kleinen Pokal und eine Urkunde erhielten.

20151227_Kettcar Rennen Cadolzburg (16)

Das Resümee war äußerst positiv, alle hatten einen Heiden Spaß bei der Sache und wahren mit sehr viel Motivation dabei.
Das wichtigste war aber, dass es auf jeden Fall nächstes Jahr wieder Rennen geben sollte.

Paypal Autorisierung oder Abbuchungsauftrag stornieren

Im Dezember 2015 habe ich bei einem Online Versandhandel eine Spiel für meinen Sohn gekauft.

Nach der Bestellung wurde ich auf die PayPal Seite weitergeleitet um die Ware zu bezahlen, was ich dann auch tat.
Leider schien bei der Bestellung irgendetwas schief gelaufen zu sein, wie ich dann vom Anbieter des Artikels erfuhr. Es wurde kein Bestell Auftrag in seinem System angelegt.
Deshalb habe ich die Bestellung ein zweites Mal durchgeführt.

Diesmal ging alles gut und der Artikel war auf dem Weg zu mir.
Der Betrag wurde nun auch meinem PayPal Konto belastet.
Nun stand aber immer noch der Betrag der ersten Bestellung mit dem Status „autorisiert“ – Mit dieser vorübergehenden Autorisierung bestätigen Sie, dass die Zahlung mit Ihrer Zahlungsquelle beglichen wird. Ihre Zahlungsquelle wird belastet, wenn die Firma XYZ Ihre Bestellung abschließt.

Nur leider wurde die erste Bestellung nicht abgeschlossen, da sie ja praktisch nicht abgeschlossen wurde.

Nun wollte ich gerne die Autorisierung stornieren und dahinter zu kommen, wie so eine Abbuchungstransaktion von PayPal gestoppt werden kann , hat mich schon ein bisschen Zeit fürs suchen gekostet. Den PayPal macht es einem hierbei nicht gerade leicht obwohl es so einfach sein könnte einfach einen Button mit Autorisierung / Abbuchungsauftrag stornieren anzuzeigen.

Stornierung eines Abbuchungsauftrags, Autorisierung

Die Stornierung einer Abbuchungsauftrages bzw. einer Autorisierung bei PayPal ist recht einfach, wenn man dem folgenden Link kennt.

Paypal Abbuchungsauftrag stornieren

 

Die Stornierung einer Abbuchungsauftrages bzw. einer Autorisierung bei PayPal ist recht einfach, wenn man dem folgenden Link kennt.

Nach dem anklicken des Links kommt man zum PayPal Konto. Dann muss man auf die Firma klicken, von der der Abbuchungsauftrag samt. Danach erscheint eine Webseite, die es ermöglicht auf „STORNO“ zu klicken, nach dem Klick wird die ausgeführte Stornierung mit einer E-Mail bestätigt.

USB Initiator Interface mit galvanischer Trennung

 

USB Initiator Interface
USB Initiator Interface

Verwendung:
Dieses Initiator Modul eignet sich besonders für eine direkte Anschluß von industriellen Lichtschranken mit einer max. Ausgangsspannung bis 27V.
Die Zeitmessung in der StopWatch Applikation erfolgt hierbei über einen virtuellen COM Port, der im Gegensatz zum StopWatch USB Modul einige Besonderheiten bereitstellt.
Besonders zu erwähnen ist hierbei die Direktstartfunktion, mit der beim Durchfahren der Startlichtschranke die Zeitmessung automatisch gestartet werden kann. Interessantist diese Funktion z.B. Bei Seifenkistenrennen oder ähnlichen Veranstaltungen, wo auf einen geregelten Startvorgang mit einer Startampel verzichtet werden kann.

Allgemeines:
Bisher stand für eine Zeiterfassung über die COM Schnittstelle lediglich ein USB Seriell Adapter und eine kleine Options Platine zur Verfügung.

Die Initiator Eingänge mussten in Folge der fehlenden Galvanischen Trennung z.B. mit einem zwischen geschalteten Relais entkoppelt und ggf.  invertiert werden. Nur so konnte gewährleistet werden, dass zwischen Messung und PC – Seite keinerlei elektrische Verbindung besteht, die im Fehlerfall zu einer Zerstörung der PC Hardware führen hätte können.

Außerdem konnten bis zur StopWatch Version 1.34 die Initiator Eingänge noch nicht in der Software invertiert werden, wofür wiederum die Relais herangezogen werden mussten, wenn der Initiator nicht das richtige Ausgangspotential zur Verfügung stellte. Der Verdrahtungsaufwand und der Platzbedarf waren erheblich.

Deshalb wurde bei der Entwicklung dieser neuen Interface Platine ein besonderes Augenmerk auf die folgenden Punkte gelegt:

Da der Platzbedarf möglichst gering gehalten werden sollte, um die komplette Platine inklusive aller Anschlüsse später in eine IP66 Verteilerdose bauen zu können, wurde das Layout der Platine komplett mit moderner SMD Technik erstellt. Nur so konnte eine Platinen Größe von 68 mm x 42 mm erreicht werden.

Es wurden WAGO SMD Anschlussklemmen mit Federklemmtechnik verwendet, die einen maximalen Aderquerschnitt bis 1,5 mm2 aufnehmen können. Die Anzahl der Klemmen wurde so gewählt das sowohl die Adern für die Spannungsversorgung, wie auch alle Anschlussleitungen der bis zu drei Lichtschranken angeschlossen werden können. Somit ist keine weitere Klemmstelle im Gehäuse mehr nötig.

Da üblicherweise als Initiatoren Lichtschranken verwendet werden, wie sie auch in Industrieellen Anwendungen zum Einsatz kommen, wurden die Initiator Eingänge für einen weiten Eingangsspannungsbereich  von 7 – 27 V ausgelegt. Zusätzlich wurden die Eingänge gegen Verpolung geschützt.

Jeder Eingang besitzt eine eigene kleine LED, mit der die Funktion des Initiators bereits bei der Installation getestet werden kann, selbst wenn noch kein PC angeschlossen ist.

Für die Verbindung mit der USB Schnittstelle wurde bewusst eine Micro USB Buchse auf der Platine verbaut. Dies bietet den Vorzug das ein defekten Anschlusskabels sehr schnell und bequem ausgetauscht werden kann. Ein weiterer Vorteil liegt in der sehr kleinen Bauform des Micro USB Steckers, der mit seinen ca. 10 mm Durchmesser leicht durch eine M18 Verteilerdosenverschraubung gesteckt werden kann.

Bei der Montage hat sich jedoch gezeigt, das ein Abgewinkelter Stecker vermutlich besser geeignet wäre.

Tabelle mit Maßen für Kabelverschraubungen

Nenngröße Kerndurchmesser
(mm)
Klemmbereich
(mm)
Metrisches Gewinde
M12 × 1,5
10,6
M16 × 1,5
14,6
Für die Initiatoranschlüsse
4–9
M18 × 1,5
16,4
M20 × 1,5
18,6
Für den USB Anschluß
6–13
M24 × 1,5
22,4
M25 × 1,5
23,6
7–17

Die USB Anschlusskabel sind im Fachhandel in verschiedenen Längen erhältlich, so dass auch hier die Anschlusskabellänge vom Anwender leicht an die Gegebenheiten angepasst werden kann.

Zusätzlich finden sich noch zwei weitere Led’s auf der Platine, die zur Anzeige des Kommunikationsstatus mit der USB Schnittstelle dienen.

Mit den vier Befestigungslöchern an jeder Kanten, kann die Platine sicher in einem Gehäuse befestigt werden.

Die Integration des USB Anschlusses unter Windows erfolgt wie beim USB RS232 Adapter als virtueller COM Port. Somit ist diese Platine sowohl für die StopWatch Software als auch für eigene Anwendungen und Projekte geeignet.

Die Initiator Eingänge arbeiten in einem weiten Spannungsbereich von 7 – 27 V=, ab einer Eingangsspannung von 7V wird das Eingangssignal sicher als High erkannt.
Jeder Eingang wird durch eine in Reihe geschaltete Diode gegen Verpolung geschützt. Der Spannungsregler in jedem Eingangszweig arbeitet als Stromkonstanter mit ca. 20mA, dieser eingeprägte Strom durch fließt die Signalisierungs Led und die Led des Optokopplers.
Schaltet der Transistor des Optokopplers durch, wird der entsprechende Eingang am FDTI Chips auf Low gezogen.

Auf der Platine befindet sich zwei Lötbrücke J1 und J2, diese beiden Brücken verbinden den Zwischenzeitinitiator wahlweise mit den Eingängen (RI) und (DCD).
Im Auslieferungszustand sind diese beide Brücken geschlossen. Sie dienen als Option für spätere Stopwatch Versionen, da sich die Auswertung des (RI) Signals im Programmcode etwas anders verhält als die des (DCD) Signals.
So ist es später möglich, auch ohne größere Eingriffe an der Hardware die Funktion entsprechend einer späteren Softwareänderung anzupassen.
DCD – (Data) Carrier Detect
RI – Ringer Indicator

Einbau des Initiator Interface:

Gut als Gehäuse eignet sich z.B. eine:

Hensel Kabelabzweigdose Abzweigkasten DE 9340 grau
98x98x61mm,  Schutzart: IP 65

Initiator Interface Hensel (7)

Als Kabeleinführungen wird empfohlen auf die mitgelieferten Gummistopfen zu verzichten und stattdessen entsprechende Kabelverschraubungen zu verwenden.  Diese bieten den Größen Vorteil, dass sie eine ausreichende Zugentlastung bieten und auch nach mehrfacher Verwendung nicht so schnell ausleiern wie die Gummistopfen.

Für die Einführung des USB Kabels sollte je nach Steckergröße eine M18 – M20 Verschraubung verwendet werden. Um anschließend die Verschraubung dicht zu bekommen, wird empfohlen das Kabel an der Verschraubung mit Klebeband so zu umwickeln, bis der benötigten Durchmesser für eine wasserdichte Verbindung erreicht ist.

Für die Initiatorkabel und die Spannungsversorgung sind je nach Kabeldurchmesser Verschraubungen mit der Größe M12 – M16 geeignet.

Werden die empfohlenen Kabelverschraubungen verwendet, dürfen die vorgeprägten Löcher in der Verteilerdose nicht einfach aufgebrochen werden, sondern müssen z.B. mit einem Stufenbohrer vorsichtig auf die richtige Größe auf gebohrt werden.

Je nach Beschaffenheit der Verteilerdose können für die Befestigung der Leiterplatte die vorhandenen Löcher verwendet werden. Da sich auf der Unterseite der Leiterplatte keine Bauteile befinden, kann diese aber auch mit einem doppelseitigen Klebeband in der Dose befestigt werden. In diesem Fall empfiehlt es sich zwichen Platine und Dosenboden noch ein PVC Platte o.ä. einzukleben, um die Höhe des USB Stecker ein wenig auszugleichen.

Prinzip Schaltplan:

USB Initiator Interface

Anschlusbelegung:

USB Initiator Interface Plane

Technische Daten:
USB 2.0 Schnittstelle
Spannungsversorgung per USB: 4.5 to 5.5 VDC / 100 mA

  • Drei galvanisch getrennte Initiatoreingänge mit einer Isolationsspannung von 5 KV rms
  • Initiator Eingangsspannung: 7V – 27V =, Typisch 24V=
  • Betriebstemperaturbereich: -20 to +55 °C
  • Abmessungen L x B x H: 68mm  x 42 mm x 8mm


Kaufpreis: 129,90 €

USB RFID Lesegerät

Dieser USB-RFID-Leser wurde speziell für den Betrieb mit der auf diesem Blog vorgestellten Software StopWatch und Wettkampf entwickelt.

Wird dieser RFID-Reader zusammen mit der StopWatch Software betrieben, können konfortable alle Teilnehmer der Veranstaltung über ihren eigenen RFID Chip authentifiziert und angemeldet werden. Wird ein Lesegerät am Start aufgestellt, kann vom Starter selbst eine automatische Starter Auswahl initiieren. Dabei wird der entsprechende Teilnehmer Datensatz automatisch geöffnet und die Teilnehmerdaten am Infobildschirm angezeigt. Auf diese Weiße entfällt die Teilnehmer Suche in der Liste oder über die Filterfunktion und die Bearbeitung wird dadurch vereinfacht und beschleunigt.

Zusätzlich können RFID Chip an die Mitarbeiter der Veranstaltung ausgegebn werden, die eine personalisierten Anmeldung an der StopWatch Software erlauben. Über die definierten Zugriffsrechte der Tags werden automatisch bestimmte Funktionen freigeschaltet bzw. gesperrt.

Die StopWatch Software ist in der Lage eine beliebige Anzahl dieser Lesegeräte zu erkennen und gleichzeitig zu betreiben. Der Reader erscheint nach dem Verbinden mit dem PC nicht als virtueller Comport in der Systemsteuerung. Wenn diese Funktionalität zusätzlich gewünscht wird kann dies auf Anfrage gerne entsprechend angepasst werden.

Wird dieser RFID-Reader zusammen mit der Wettkampf Software betrieben, können alle Teilnehmer die Zeitnahme durch auflegen Ihres RFID Chips Starten und beenden. Die Zeitnahme erfolgt automatisch ohne das die Rennleitung eine manuelle Erfassung durchführen muss.

Die Wettkampf Zeiterfassungssoftware ist in der Lage eine beliebige Anzahl dieser Lesegeräte sowie des oben vorgestellten USB-Seriell-DB9-Com-Adapter zu erkennen und gleichzeitig zu betreiben. Der Reader erscheint nach dem Verbinden mit dem PC nicht als virtueller Comport in der Systemsteuerung. Wenn diese Funktionalität zusätzlich gewünscht wird kann dies auf Anfrage gerne entsprechend angepasst werden.

Technische Details

Mit diesem USB-RFID Lesegerät (Radio Frequency Identification) können Transponder der Familie EM4100 ausgelesen werden. Diese Transponder arbeiten mit einer Trägerfrequenz von 125 Khz und sind für kurze Distanzbereiche bis zu 5 cm geeignet. Das Lesegerät beinhaltet ein serielles RFID-Reader-Modul der Firma Paralax. Die Anbindung an die USB-Schnittstelle erfolgt durch eine weitere Platine, auf der sich ein Schnittstellenwandler FT232RL (Seriell USB Umsetzer) befindet und die Verbindung zur USB-Schnittstelle des PC’s herstellt.

Das Gerät wird direkt über den USB-Port versorgt. Es wird keine zusätzliche externe Stromversorgung benötigt. Beim Anschluss von mehreren USB Geräte an einen USB-Hub, wird der Einsatz eines fremdgespeisten USB-Hub enmpfohlen, um die maximale Grenze von 500 mA nicht zu überschreiten.

Kompatible Tags:

  • 54x85mm Rectangle Tag ISO Card: 6.3cm (2.5″) +/- 10%
  • 50mm Round Tag World Tag 50mm: 6.8cm (2.7″) +/- 10%
  • Blue Eye Key Fob
  • 25mm Disk Tag

Technische Daten:

  • Liest 125 kHz Tags, der Familie EM41000
  • Spannungsversorgung per USB: 4.5 to 5.5 VDC / 110 mA
  • Kommunikation CMD Direct Driver d2xx.dll, 2400 Baud (8N1)
  • Betriebstemperaturbereich: -20 to +55 °C