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';
?>