Files
dc-sensor/software/device-api.php
T
Sven Luethi c44e580120 modified: .gitignore
modified:   software/README.md
	modified:   software/app.php
	modified:   software/database/sqlite.php
	modified:   software/device-api.php
	modified:   software/router.php
2024-07-08 00:33:40 +02:00

62 lines
2.1 KiB
PHP

<?php
// Returns a new ID for device to use for future communication.
$router->post('/api/register', function($req) {
$data = $req->getJSONBody();
//echo "Body: ".var_dump($data)."\n";
// Verify a mac address was sent...
if(!isset($data['mac_address']) || !preg_match("/^[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]$/i",$data['mac_address'])) {
echo $data['mac_address']." does not match a mac address.\n";
http_response_code(400);
return;
}
/*
$newDevice = [
'id' => 'device123',
'mac_address' => $data['mac_address'],
'ip_address' => '192.168.1.2',
'seen_ip_address' => '192.168.1.2',
'firmware_version' => '1.0.1',
'temperature_offset' => 0,
'humidity_offset' => 0,
'last_updated' => date('Y-m-d H:i:s'),
'last_seen' => date('Y-m-d H:i:s')
];
$deviceDb->addDevice($newDevice);
*/
http_response_code(200);
});
// Device reports temperature back on this endpoint.
$router->post('/api/report', function($req) {
echo 'body:' . var_dump($req->getBody()) . "\n";
DumpHTTPRequestToFile::execute("/tmp/out.txt");
http_response_code(200);
});
$router->get('/api/update', function() {
if ( $_SERVER['HTTP_USER_AGENT'] == 'ESP8266-http-Update' && isset($_SERVER['HTTP_X_ESP8266_SKETCH_MD5']) ) {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$curr_firmware_md5 = $_SERVER['HTTP_X_ESP8266_SKETCH_MD5'];
$firmware_file = __DIR__ . '/firmware.bin';
$firmware_md5 = md5_file($firmware_file);
echo "USER_AGENT -> ESP8266-http-Update\n";
echo 'X_ESP8266_SKETCH_MD5 -> ' . $_SERVER['HTTP_X_ESP8266_SKETCH_MD5'] . "\n";
echo 'MD5 file hash of ' . $firmware_file . ': ' . $firmware_md5;
if ( $curr_firmware_md5 == $firmware_md5 ) {
http_response_code(204);
}
else {
$fwdata = file_get_contents($firmware_file);
header('Content-Length:' . strlen($fwdata));
echo $fwdata;
http_response_code(200);
}
return;
}
http_response_code(400);
});