<?php

#$time1 = microtime(true);
$body = file_get_contents('php://input');
$t = time();
$date = date('d.m.Y');
$ip = $_SERVER["REMOTE_ADDR"];
$agent = $_SERVER["HTTP_USER_AGENT"];
#$time2 = microtime(true);
#$exe = $time2-$time1;

#file_put_contents('API-wifi.raw', $body . ' ' . $t . ' ' . $date . ' ' . $ip . ' ' . $agent . ' ' . $exe . PHP_EOL, FILE_APPEND);
file_put_contents('API-wifi.raw', $body . ' ' . $t . ' ' . $date . ' ' . $ip . ' ' . $agent . PHP_EOL, FILE_APPEND);

$vars = preg_split('/\s+/', $body);

if ((string) $vars[3] !== "V") { exit(0); }

$node_id = (string) $vars[2];

switch ($node_id) {
	case "N03":
		file_put_contents('N03/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Dospat";
		$altitude = 1270;
		break;
        case "N06":
                file_put_contents('N06/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
                $location = "test_indoors";
                $altitude = 170.8;
                break;
	case "N14":
		file_put_contents('N14/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "unknown";
		$altitude = 0;
		break;
	case "N15":
		file_put_contents('N15/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "unknown";
		$altitude = 0;
		break;
        case "N16":
                file_put_contents('N16/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
                $location = "test_indoors";
                $altitude = 167.9;
                break;
	case "N17":
		file_put_contents('N17/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "unknown";
		$altitude = 0;
		break;
        case "N19":
                file_put_contents('N19/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
                $location = "test_dev_node_stoyancho";
                $altitude = 0;
                break;
	case "N20":
		file_put_contents('N20/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Glozhene";
		$altitude = 65.2;
		break;
	case "N22":
		file_put_contents('N22/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Mirkovo";
		$altitude = 676.4;
		break;
	case "N25":
		file_put_contents('N25/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Troyan";
		$altitude = 399.3;
		break;
	case "N26":
		file_put_contents('N26/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Harmanli";
		$altitude = 97.2;
		break;
	case "N27":
		file_put_contents('N27/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Smolyan";
		$altitude = 948.8;
		break;
	case "N28":
		file_put_contents('N28/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "unknown";
		$altitude = 0;
		break;
	case "N29":
		file_put_contents('N29/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Varvara";
		$altitude = 338.1;
		break;
	case "N31":
		file_put_contents('N31/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Zdravets_Hut";
		$altitude = 1212.5;
		break;
	case "N32":
		file_put_contents('N32/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Velingrad";
		$altitude = 759.6;
		break;
	case "N33":
		file_put_contents('N33/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Rudartsi";
		$altitude = 847.4;
		break;
	case "N34":
		file_put_contents('N34/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Elhovo";
		$altitude = 114.7;
		break;
	case "N35":
		file_put_contents('N35/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Plovdiv_NW";
		$altitude = 192;
		break;
	case "N36":
		file_put_contents('N36/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Samokov";
		$altitude = 946.5;
		break;
	case "N37":
		file_put_contents('N37/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Mosomishte";
		$altitude = 610.7;
		break;
	case "N38":
		file_put_contents('N38/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Veliko_Tarnovo";
		$altitude = 189;
		break;
	case "N39":
		file_put_contents('N39/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Dobrich";
		$altitude = 229.3;
		break;
	case "N41":
		file_put_contents('N41/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Panagyurski_kolonii";
		$altitude = 1067.2;
		break;
	case "N42":
		file_put_contents('N42/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Sofia_Ilinden";
		$altitude = 560.9;
		break;
	case "N43":
		file_put_contents('N43/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Sofia_Hladilnika";
		$altitude = 628.1;
		break;
	case "N44":
		file_put_contents('N44/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Sofia_Yavorov";
		$altitude = 548.5;
		break;
	case "N45":
		file_put_contents('N45/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Hayredin";	
		$altitude = 67;
		break;
	case "N46":
		file_put_contents('N46/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Sofia_Mladost";
		$altitude = 608.6;
		break;
	case "N47":
		file_put_contents('N47/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Muselievo";
		$altitude = 33.7;
		break;
	case "N48":
		file_put_contents('N48/data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "Bansko";
		$altitude = 931.4;
		break;
	default:
		file_put_contents('API-wifi-unexpected-data.raw', $body . ' ' . $t . ' ' . $date . PHP_EOL, FILE_APPEND);
		$location = "unknown";
		$altitude = 0;
	}

$t_raw = (float) $vars[12];
$p_raw = (float) $vars[11];
$rh = (int) $vars[13];
$pm25 = (int) $vars[9];
$pm10 = (int) $vars[10];
$gamma_raw = (int) $vars[14];
$signal = (int) $vars[4];

# t_dew calculations
$a=6.1121;
$d=234.5;
if ($t_raw < 0) {
	$b=17.966;
	$c=247.15;
}
else {
	$b=17.368;
	$c=238.88;
}
$gm = log( $rh*0.01*( pow(exp(1),(($b-(1*$t_raw)/$d)*((1*$t_raw)/($c+(1*$t_raw))))) ) );
$t_dew = round($c*(1*$gm)/($b-(1*$gm)), 1);

# p_sea calculations
$p_sea = round($p_raw*pow((1-(0.0065*$altitude)/($t_raw+0.0065*$altitude+273.15)),-5.257), 1);

# gamma_cpm calculations
$gamma_cpm = round($gamma_raw/5, 0);

# Submit data to local instance of InfluxDB through HTTP API call
$pm25 .= "i";
$pm10 .= "i";
$gamma_raw .= "i";
$gamma_cpm .= "i";
$signal .= "i";
$ts = $t;
$ts .= "i";

$curl = curl_init();
curl_setopt_array($curl, array(
	CURLOPT_URL => 'http://localhost:8086/write?db=meter&precision=s&u=editor&p=HFZhChwzKv2yahsF',
	CURLOPT_SSL_VERIFYPEER => 0,
	CURLOPT_SSL_VERIFYHOST => 0,	
	CURLOPT_RETURNTRANSFER => 0,
	CURLOPT_POST => 1,
	CURLOPT_POSTFIELDS => "box,node_id=$node_id,altitude=$altitude,location=$location,phy=wifi t_raw=$t_raw,t_dew=$t_dew,p_raw=$p_raw,p_sea=$p_sea,rh=$rh,pm25=$pm25,pm10=$pm10,gamma_raw=$gamma_raw,gamma_cpm=$gamma_cpm,signal=$signal,ip=\"$ip\",ts=$ts $t",
	CURLOPT_HTTPHEADER => array('Content-Type: text/plain')
));
curl_exec($curl);
curl_close($curl);
?>
