Daten aus HidNSeek in MySql speichern
Über Kickstarter habe ich mich an dem HidnSeek beteiligt.
Es handelt sich dabei um einen GPS Tracker, der nicht klassisch die gewonnen Daten per GPRS überträgt sonder als IoT (Internet of Things) über das Sigfox Netzwerk verschickt.
Auch wenn das Netz in Deutschland noch nicht ausgebaut ist, so konnte ich das kleine Gerät schon in den Niederlanden und Frankreich testen.
Mein Ziel war es jetzt, das die Positionsdaten nicht nur bei HidnSeek selber liegen, sondern auch bei mir in einer Datenbank.
Dafür habe ich zunächst eine Tabelle mit folgender Struktur angelegt:
Spalte |
Typ |
Null |
Standard |
id |
int(6) |
Nein |
|
lat |
decimal(20,17) |
Ja |
NULL |
lon |
decimal(20,17) |
Ja |
NULL |
battery |
float(5,2) |
Ja |
NULL |
cap |
float(5,2) |
Ja |
NULL |
snr |
float(5,2) |
Ja |
NULL |
speed |
float(5,2) |
Ja |
NULL |
timestamp |
int(11) |
Ja |
NULL |
device_id |
bigint(15) |
Ja |
NULL |
recorded_at |
varchar(25) |
Ja |
NULL |
altitude |
decimal(8,2) |
Ja |
NULL |
sat |
int(2) |
Ja |
NULL |
type_event |
varchar(10) |
Ja |
NULL |
temp |
float(5,2) |
Ja |
NULL |
press |
decimal(6,2) |
Ja |
NULL |
direction |
float(5,2) |
Nein |
0.00 |
raw_message |
text |
Ja |
NULL |
lat_tower |
decimal(10,2) |
Ja |
NULL |
lon_tower |
decimal(10,2) |
Ja |
NULL |
tower |
varchar(5) |
Ja |
NULL |
rssi |
decimal(6,2) |
Ja |
NULL |
seq_number |
int(11) |
Ja |
NULL |
Auf der Seite von HidNSeek kann man, natürlich nach Anmeldung und Aktivierung seines Gerätes in den Device details unter IFTTT/API Configuration, Web hook for messages die URL eintragen:
Die Nachricht wird per POST übergeben und kann daher ganz einfach verarbeitet werden. In diesem Fall lade ich sie 1:1 in die Tabelle.
<?php
/* Config */
include_once("config.php");
include_once ("opendb.php");
$ID = $_POST["id"];
$LAT = $_POST["lat"];
$LON = $_POST["lon"];
$BATTERY = $_POST["battery"];
$CAP = $_POST["cap"];
$SNR = $_POST["snr"];
$SPEED = $_POST["speed"];
$TIMESTAMP = $_POST["timestamp"];
$DEVICE_ID = $_POST["device_id"];
$RECORDED_AT = $_POST["recorded_at"];
$ALTITUDE = $_POST["altitude"];
$SAT = $_POST["sat"];
$TYPE_EVENT = $_POST["type_event"];
$TEMP = $_POST["temp"];
$PRESS = $_POST["press"];
$RAW_MESSAGE = $_POST["raw_message"];
$LAT_TOWER = $_POST["lat_tower"];
$LON_TOWER = $_POST["lon_tower"];
$TOWER = $_POST["tower"];
$RSSI = $_POST["rssi"];
$SEQ_NUMBER = $_POST["seq_number"];
$eintrag = "INSERT INTO jos_hidnseek (id, lat, lon, battery, cap, snr, speed, timestamp, device_id, recorded_at, altitude, sat, type_event, temp, press, raw_message, lat_tower, lon_tower, tower, rssi, seq_number) VALUES ('$ID', '$LAT', '$LON', '$BATTERY','$CAP','$SNR','$SPEED','$TIMESTAMP','$DEVICE_ID','$RECORDED_AT','$ALTITUDE','$SAT','$TYPE_EVENT','$TEMP','$PRESS','$RAW_MESSAGE','$LAT_TOWER','$LON_TOWER','$TOWER','$RSSI','$SEQ_NUMBER')";
$eintragen = mysql_query($eintrag);
include_once 'closedb.php';
?>
HidenSeek hat das Verfahren auf Json Weebhook umgestellt daher ist der neue PHP Code:
<?php
/* Config */
include_once("config.php");
include_once ("opendb.php");
$data = file_get_contents('php://input');
$json_data = json_decode($data);
// Saving data to a file
//file_put_contents("webhook.log",$data . "\n", FILE_APPEND);
$ID = $json_data->id;
$LAT = $json_data->lat;
$LON = $json_data->lon;
$BATTERY = $json_data->battery;
$CAP = $json_data->cap;
$SNR = $json_data->snr;
$SPEED = $json_data->speed;
$TIMESTAMP = $json_data->timestamp-7200;
$DEVICE_ID = $json_data->device_id;
$RECORDED_AT = $json_data->recorded_at;
$ALTITUDE = $json_data->altitude;
$SAT = $json_data->sat;
$TYPE_EVENT = $json_data->type_event;
$TEMP = $json_data->temp;
$PRESS = $json_data->press;
$RAW_MESSAGE = $json_data->extra;
$LAT_TOWER = $json_data->lat_tower;
$LON_TOWER = $json_data->lon_tower;
$TOWER = $json_data->tower;
$RSSI = $json_data->rssi;
$SEQ_NUMBER = $json_data->seq_number;
echo "ID: ",$ID," LAT: ", $LAT;
if ($id >0){
$eintrag = "INSERT INTO gps (id, lat, lon, battery, cap, snr, speed, timestamp, device_id, recorded_at, altitude, sat, type_event, temp, press, seq_number) VALUES ('$ID', '$LAT', '$LON', '$BATTERY','$CAP','$SNR','$SPEED','$TIMESTAMP','$DEVICE_ID','$RECORDED_AT','$ALTITUDE','$SAT','$TYPE_EVENT','$TEMP','$PRESS','$SEQ_NUMBER')";
//echo $eintrag;
$statement = $mysqli->prepare($eintrag);
//$statement->bind_param('i', $time);
$statement->execute();
echo "\n Uploaded";
}
include_once 'closedb.php';
?>