wifi-probe-aggregator/ws/reader.php

150 lines
5.6 KiB
PHP
Raw Normal View History

2020-07-27 21:54:53 +02:00
<?php
// Lettura file di configurazione
$config = parse_ini_file('../config.ini');
// Array per la risposta del web service
$result = [];
switch( $_POST['op'] ){
case 'get-last-devices':
if (!empty($_POST['date_start']) && !empty($_POST['date_end'])) {
// Connessione al database
$mysqli = mysqli_connect($config['db_host'], $config['db_user'], $config['db_pass'], $config['db_name']);
// Errore nella connessione a database
if (mysqli_connect_errno($mysqli)) {
$result = [
'status' => 'ERR',
'message' => mysqli_connect_error(),
];
} else {
// Lettura device fra le date richieste
$sql = "SELECT DISTINCT logs.mac, logs.ssid, logs.dbm, logs_data.received_at, devices.nome FROM logs LEFT JOIN devices ON logs.mac=devices.mac INNER JOIN (SELECT mac, MAX(received_at) AS received_at FROM logs GROUP BY mac) AS logs_data ON logs_data.mac=logs.mac WHERE logs_data.received_at BETWEEN ? AND ? ORDER BY logs_data.received_at DESC";
$stmt = $mysqli->prepare($sql);
// Errore nella preparazione query
if (!$stmt) {
$result = [
'status' => 'ERR',
'message' => $mysqli->error,
];
} else {
if ($stmt->bind_param('ss', $date_start, $date_end)) {
$date_start = $_POST['date_start'];
$date_end = $_POST['date_end'];
// Esecuzione statement
$stmt->execute();
$rs = $stmt->get_result();
while ($row = $rs->fetch_assoc()) {
// Conversione del segnale in percentuale se richiesto
if ($_POST['signal_type'] == 'percent') {
if ($row['dbm'] <= -100) {
$row['dbm'] = 0;
} elseif ($row['dbm'] >= -50) {
$row['dbm'] = 100;
} else {
$row['dbm'] = 2 * ($row['dbm'] + 100);
}
}
$records[] = $row;
}
$result = [
'status' => 'OK',
'records' => (array)$records,
];
} else {
$result = [
'status' => 'ERR',
'message' => 'Errore durante l\'esecuzione query',
];
}
}
}
echo json_encode($result);
$stmt->close();
$mysqli->close();
}
break;
case 'get-online-devices':
if (!empty($_POST['date_start']) && !empty($_POST['date_end'])) {
// Connessione al database
$mysqli = mysqli_connect($config['db_host'], $config['db_user'], $config['db_pass'], $config['db_name']);
// Errore nella connessione a database
if (mysqli_connect_errno($mysqli)) {
$result = [
'status' => 'ERR',
'message' => mysqli_connect_error(),
];
} else {
// Lettura numero di device unico nell'intervallo di date
$sql = "SELECT DISTINCT logs.mac FROM logs WHERE received_at BETWEEN ? AND ?";
$stmt = $mysqli->prepare($sql);
// Errore nella preparazione query
if (!$stmt) {
$result = [
'status' => 'ERR',
'message' => $mysqli->error,
];
} else {
if ($stmt->bind_param('ss', $date_start, $date_end)) {
$date_start = $_POST['date_start'];
$date_end = $_POST['date_end'];
// Esecuzione statement
$stmt->execute();
$rs = $stmt->get_result();
while ($row = $rs->fetch_assoc()) {
// Conversione del segnale in percentuale se richiesto
if ($_POST['signal_type'] == 'percent') {
if ($row['dbm'] <= -100) {
$row['dbm'] = 0;
} elseif ($row['dbm'] >= -50) {
$row['dbm'] = 100;
} else {
$row['dbm'] = 2 * ($row['dbm'] + 100);
}
}
$records[] = $row;
}
$result = [
'status' => 'OK',
'records' => sizeof($records),
];
} else {
$result = [
'status' => 'ERR',
'message' => 'Errore durante l\'esecuzione query',
];
}
}
}
echo json_encode($result);
$stmt->close();
$mysqli->close();
}
break;
}