diff --git a/app/api/RoomsApi.php b/app/api/RoomsApi.php index 22562b0..d3a5dc9 100644 --- a/app/api/RoomsApi.php +++ b/app/api/RoomsApi.php @@ -3,7 +3,7 @@ class RoomsApi extends ApiController{ public function default(){ - $this->requireAuth(); + //$this->requireAuth(); $response = []; $roomIds = []; $roomsData = RoomManager::getRoomsDefault(); @@ -15,6 +15,7 @@ class RoomsApi extends ApiController{ $subDevicesData = SubDeviceManager::getSubdevicesByRoomIds($roomIds); foreach ($roomsData as $roomKey => $roomData) { + if ($roomData['device_count'] <= 0) continue; $response[] = [ 'room_id' => $roomData['room_id'], 'name' => $roomData['name'], diff --git a/app/api/UpdaterApi.php b/app/api/UpdaterApi.php new file mode 100644 index 0000000..65593f7 --- /dev/null +++ b/app/api/UpdaterApi.php @@ -0,0 +1,67 @@ + '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(); + } +} diff --git a/app/api/UpdatesApi.php b/app/api/UpdatesApi.php index 020e04e..4c4710e 100644 --- a/app/api/UpdatesApi.php +++ b/app/api/UpdatesApi.php @@ -1,5 +1,5 @@ -write("[Updater] Client Connected", LogRecordType::WARNING); + + //Filtrování IP adress if (DEBUGMOD != 1) { if (!in_array($_SERVER['REMOTE_ADDR'], HOMEIP)) { @@ -21,26 +23,26 @@ class UpdatesApi { '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); + $logManager->write("[Updater] acces denied from " . $_SERVER['REMOTE_ADDR'], LogRecordType::INFO); 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); + $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); + $logManager->write("[Updater] version PHP: " . md5_file($localBinary), LogRecordType::INFO); if ($_SERVER['HTTP_X_ESP8266_SKETCH_MD5'] != md5_file($localBinary)) { - sendFile($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); + $logManager->write("[Device] version hash: " . md5_file($localBinary), LogRecordType::INFO); //notification $notificationMng = new NotificationManager; $notificationData = [ @@ -63,4 +65,4 @@ class UpdatesApi { } die(); } -} \ No newline at end of file +} diff --git a/app/api/WidgetApi.php b/app/api/WidgetApi.php index 1cbbf9c..2734d9f 100644 --- a/app/api/WidgetApi.php +++ b/app/api/WidgetApi.php @@ -3,31 +3,34 @@ class WidgetApi extends ApiController{ public function run($subDeviceId){ //$this->requireAuth(); + $response = null; + if (RecordManager::getLastRecord($subDeviceId)['execuded'] === 0) { + throw new Exception("Unreachable", 409); + } $subDeviceData = SubDeviceManager::getSubDevice($subDeviceId); if ($subDeviceData['type'] == 'on/off'){ $lastValue = RecordManager::getLastRecord($subDeviceData['subdevice_id'])['value']; RecordManager::create($subDeviceData['device_id'], 'on/off', !$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]); } - 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){ //$this->requireAuth(); $response = null; @@ -37,7 +40,7 @@ class WidgetApi extends ApiController{ $deviceData = DeviceManager::getDeviceById($deviceId); $events = RecordManager::getLastRecord($subDeviceId, 5); - $LastRecordTime = new DateTime($$events[4]['time']); + $LastRecordTime = new DateTime($events[4]['time']); $niceTime = Utilities::ago($LastRecordTime); $interval = $LastRecordTime->diff(new DateTime()); diff --git a/app/models/managers/RoomManager.php b/app/models/managers/RoomManager.php index 795ee79..6c7f393 100644 --- a/app/models/managers/RoomManager.php +++ b/app/models/managers/RoomManager.php @@ -13,7 +13,7 @@ class RoomManager{ } 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; }