This commit is contained in:
Václav Španinger 2020-07-20 11:07:32 +02:00
parent d1b4597720
commit 05bd0dbc64
5 changed files with 102 additions and 29 deletions

View File

@ -3,7 +3,7 @@
class RoomsApi extends ApiController{ class RoomsApi extends ApiController{
public function default(){ public function default(){
$this->requireAuth(); //$this->requireAuth();
$response = []; $response = [];
$roomIds = []; $roomIds = [];
$roomsData = RoomManager::getRoomsDefault(); $roomsData = RoomManager::getRoomsDefault();
@ -15,6 +15,7 @@ class RoomsApi extends ApiController{
$subDevicesData = SubDeviceManager::getSubdevicesByRoomIds($roomIds); $subDevicesData = SubDeviceManager::getSubdevicesByRoomIds($roomIds);
foreach ($roomsData as $roomKey => $roomData) { foreach ($roomsData as $roomKey => $roomData) {
if ($roomData['device_count'] <= 0) continue;
$response[] = [ $response[] = [
'room_id' => $roomData['room_id'], 'room_id' => $roomData['room_id'],
'name' => $roomData['name'], 'name' => $roomData['name'],

67
app/api/UpdaterApi.php Normal file
View File

@ -0,0 +1,67 @@
<?php
class UpdatesApi {
private function sendFile($path) {
header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK', true, 200);
header('Content-Type: application/octet-stream', true);
header('Content-Disposition: attachment; filename=' . basename($path));
header('Content-Length: ' . filesize($path), true);
header('x-MD5: ' . md5_file($path), true);
readfile($path);
}
public function default(){
header('Content-type: text/plain; charset=utf8', true);
$logManager = new LogManager('../logs/ota/'. date("Y-m-d").'.log');
//Filtrování IP adress
/* if (DEBUGMOD != 1) {
if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) {
echo json_encode(array(
'state' => 'unsuccess',
'errorMSG' => "Using API from your IP insnt alowed!",
));
header($_SERVER["SERVER_PROTOCOL"]." 401 Unauthorized");
$logManager->write("[Updater] acces denied from " . $_SERVER['REMOTE_ADDR'], LogRecordType::WARNING);
exit();
}
}*/
$macAddress = $_SERVER['HTTP_X_ESP8266_STA_MAC'];
$localBinary = "../updater/" . str_replace(':', '', $macAddress) . ".bin";
$logManager->write("[Updater] url: " . $localBinary, LogRecordType::INFO);
$logManager->write("[Updater] version: " . $_SERVER['HTTP_X_ESP8266_SKETCH_MD5'], LogRecordType::INFO);
if (file_exists($localBinary)) {
$logManager->write("[Updater] version PHP: \n" . md5_file($localBinary), LogRecordType::INFO);
if ($_SERVER['HTTP_X_ESP8266_SKETCH_MD5'] != md5_file($localBinary)) {
$this->sendFile($localBinary);
//get device data
$device = DeviceManager::getDeviceByMac($macAddress);
$deviceName = $device['name'];
$deviceId = $device['device_id'];
//logfile write
$logManager->write("[Device] device_ID " . $deviceId . " was just updated to new version", LogRecordType::WARNING);
$logManager->write("[Device] version hash: \n" . md5_file($localBinary), LogRecordType::INFO);
//notification
$notificationMng = new NotificationManager;
$notificationData = [
'title' => 'Info',
'body' => $deviceName.' was just updated to new version',
'icon' => BASEDIR . '/app/templates/images/icon-192x192.png',
];
if ($notificationData != []) {
$subscribers = $notificationMng->getSubscription();
foreach ($subscribers as $key => $subscriber) {
$logManager->write("[NOTIFICATION] SENDING TO " . $subscriber['id'] . " ", LogRecordType::INFO);
$answer = $notificationMng->sendSimpleNotification(SERVERKEY, $subscriber['token'], $notificationData);
}
}
} else {
header($_SERVER["SERVER_PROTOCOL"].' 304 Not Modified', true, 304);
}
} else {
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
}
die();
}
}

View File

@ -1,5 +1,5 @@
<?php <?php
class UpdatesApi { class UpdatesApi {
private function sendFile($path) { private function sendFile($path) {
header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK', true, 200); header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK', true, 200);
header('Content-Type: application/octet-stream', true); header('Content-Type: application/octet-stream', true);
@ -8,11 +8,13 @@ class UpdatesApi {
header('x-MD5: ' . md5_file($path), true); header('x-MD5: ' . md5_file($path), true);
readfile($path); readfile($path);
} }
public function default(){ public function default(){
$logManager = new LogManager(); header('Content-type: text/plain; charset=utf8', true);
header('Content-type: text/plain; charset=utf8', true); $logManager = new LogManager('../logs/ota/'. date("Y-m-d").'.log');
$logManager->write("[Updater] Client Connected", LogRecordType::WARNING);
//Filtrování IP adress //Filtrování IP adress
if (DEBUGMOD != 1) { if (DEBUGMOD != 1) {
if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) { if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) {
@ -21,26 +23,26 @@ class UpdatesApi {
'errorMSG' => "Using API from your IP insnt alowed!", 'errorMSG' => "Using API from your IP insnt alowed!",
)); ));
header($_SERVER["SERVER_PROTOCOL"]." 401 Unauthorized"); header($_SERVER["SERVER_PROTOCOL"]." 401 Unauthorized");
$logManager->write("[Updater] acces denied from " . $_SERVER['REMOTE_ADDR'], LogRecordType::WARNING); $logManager->write("[Updater] acces denied from " . $_SERVER['REMOTE_ADDR'], LogRecordType::INFO);
exit(); exit();
} }
} }
$macAddress = $_SERVER['HTTP_X_ESP8266_STA_MAC']; $macAddress = $_SERVER['HTTP_X_ESP8266_STA_MAC'];
$localBinary = "../updater/" . str_replace(':', '', $macAddress) . ".bin"; $localBinary = "../updater/" . str_replace(':', '', $macAddress) . ".bin";
$logManager->write("[Updater] url: " . $localBinary, LogRecordType::INFO); $logManager->write("[Updater] url: " . $localBinary, LogRecordType::INFO);
$logManager->write("[Updater] version: " . $_SERVER['HTTP_X_ESP8266_SKETCH_MD5'], LogRecordType::INFO); $logManager->write("[Updater] version: " . $_SERVER['HTTP_X_ESP8266_SKETCH_MD5'], LogRecordType::INFO);
if (file_exists($localBinary)) { if (file_exists($localBinary)) {
$logManager->write("[Updater] version PHP: \n" . md5_file($localBinary), LogRecordType::INFO); $logManager->write("[Updater] version PHP: " . md5_file($localBinary), LogRecordType::INFO);
if ($_SERVER['HTTP_X_ESP8266_SKETCH_MD5'] != md5_file($localBinary)) { if ($_SERVER['HTTP_X_ESP8266_SKETCH_MD5'] != md5_file($localBinary)) {
sendFile($localBinary); $this->sendFile($localBinary);
//get device data //get device data
$device = DeviceManager::getDeviceByMac($macAddress); $device = DeviceManager::getDeviceByMac($macAddress);
$deviceName = $device['name']; $deviceName = $device['name'];
$deviceId = $device['device_id']; $deviceId = $device['device_id'];
//logfile write //logfile write
$logManager->write("[Device] device_ID " . $deviceId . " was just updated to new version", LogRecordType::WARNING); $logManager->write("[Device] device_ID " . $deviceId . " was just updated to new version", LogRecordType::WARNING);
$logManager->write("[Device] version hash: \n" . md5_file($localBinary), LogRecordType::INFO); $logManager->write("[Device] version hash: " . md5_file($localBinary), LogRecordType::INFO);
//notification //notification
$notificationMng = new NotificationManager; $notificationMng = new NotificationManager;
$notificationData = [ $notificationData = [
@ -63,4 +65,4 @@ class UpdatesApi {
} }
die(); die();
} }
} }

View File

@ -3,31 +3,34 @@ class WidgetApi extends ApiController{
public function run($subDeviceId){ public function run($subDeviceId){
//$this->requireAuth(); //$this->requireAuth();
$response = null; $response = null;
if (RecordManager::getLastRecord($subDeviceId)['execuded'] === 0) {
throw new Exception("Unreachable", 409);
}
$subDeviceData = SubDeviceManager::getSubDevice($subDeviceId); $subDeviceData = SubDeviceManager::getSubDevice($subDeviceId);
if ($subDeviceData['type'] == 'on/off'){ if ($subDeviceData['type'] == 'on/off'){
$lastValue = RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value']; $lastValue = RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value'];
RecordManager::create($subDeviceData['device_id'], 'on/off', !$lastValue); RecordManager::create($subDeviceData['device_id'], 'on/off', !$lastValue);
$response = !$lastValue; $response = !$lastValue;
} else {
throw new Exception("Bad Request", 403);
}
$i = 0;
$timeout = 20;
while (RecordManager::getLastRecord($subDeviceId)['execuded'] == 0){
if ($i == $timeout) {
throw new Exception("Timeout", 444);
}
$i++;
usleep(250000);
} }
$this->response(['value' => $response]); $this->response(['value' => $response]);
} }
public function check($subDeviceId){
//$this->requireAuth();
$response = null;
$lastRecord = RecordManager::getLastRecord($subDeviceId);
$response = [
'executet' => $lastRecord['execuded'],
'value' => $lastRecord['value'],
];
$this->response($response);
}
public function detail($subDeviceId){ public function detail($subDeviceId){
//$this->requireAuth(); //$this->requireAuth();
$response = null; $response = null;
@ -37,7 +40,7 @@ class WidgetApi extends ApiController{
$deviceData = DeviceManager::getDeviceById($deviceId); $deviceData = DeviceManager::getDeviceById($deviceId);
$events = RecordManager::getLastRecord($subDeviceId, 5); $events = RecordManager::getLastRecord($subDeviceId, 5);
$LastRecordTime = new DateTime($$events[4]['time']); $LastRecordTime = new DateTime($events[4]['time']);
$niceTime = Utilities::ago($LastRecordTime); $niceTime = Utilities::ago($LastRecordTime);
$interval = $LastRecordTime->diff(new DateTime()); $interval = $LastRecordTime->diff(new DateTime());

View File

@ -13,7 +13,7 @@ class RoomManager{
} }
static function getRoomsDefault () { static function getRoomsDefault () {
$allRoom = Db::loadAll ("SELECT room_id, name FROM rooms"); $allRoom = Db::loadAll ("SELECT rooms.room_id, rooms.name, COUNT(devices.device_id) as device_count FROM rooms LEFT JOIN devices ON (devices.room_id=rooms.room_id) GROUP BY rooms.room_id;");
return $allRoom; return $allRoom;
} }