Google API Progress
This commit is contained in:
		@@ -21,7 +21,8 @@ $router->any('/rooms', 'Rooms');
 | 
				
			|||||||
$router->post('/api/devices', 'DevicesApi@getAllDevices');
 | 
					$router->post('/api/devices', 'DevicesApi@getAllDevices');
 | 
				
			||||||
$router->post('/api/login', 'AuthApi@login');
 | 
					$router->post('/api/login', 'AuthApi@login');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$router->post('/api/HA', 'GoogleHome@response');
 | 
					$router->get('/api/HA/auth', 'GoogleHomeApi@autorize');
 | 
				
			||||||
 | 
					$router->post('/api/HA', 'GoogleHomeApi@response');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// examples
 | 
					// examples
 | 
				
			||||||
$router->any('/api/example', 'ExampleApi@example');
 | 
					$router->any('/api/example', 'ExampleApi@example');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,18 +2,130 @@
 | 
				
			|||||||
class GoogleHomeApi {
 | 
					class GoogleHomeApi {
 | 
				
			||||||
	function response()
 | 
						function response()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							$json = file_get_contents('php://input');
 | 
				
			||||||
 | 
							$obj = json_decode($json, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager = new LogManager('../logs/api/HA/'. date("Y-m-d").'.log');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] request body\n" . json_encode($obj, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] POST  body\n" . json_encode($_POST, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] GET body\n" . json_encode($_GET, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		header('Content-Type: application/json');
 | 
							header('Content-Type: application/json');
 | 
				
			||||||
        $update_response = file_get_contents("php://input");
 | 
							switch ($obj['inputs'][0]['intent']) {
 | 
				
			||||||
        $update = json_decode($update_response, true);
 | 
								case 'action.devices.SYNC':
 | 
				
			||||||
        echo '"RichResponse": {
 | 
									self::sync($obj['requestId']);
 | 
				
			||||||
            "items": [
 | 
								break;
 | 
				
			||||||
              {
 | 
					
 | 
				
			||||||
                "simpleResponse": {
 | 
								case 'action.devices.QUERY':
 | 
				
			||||||
                  "textToSpeech": "test speech"
 | 
					
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								case 'action.devices.EXECUTE':
 | 
				
			||||||
 | 
									self::execute($obj['requestId'], $obj['inputs'][0]['payload']);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
            ]
 | 
					
 | 
				
			||||||
          }';
 | 
						static function sync($requestId){
 | 
				
			||||||
 | 
							$devices = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$roomsData = RoomManager::getAllRooms();
 | 
				
			||||||
 | 
							foreach ($roomsData as $roomKey => $roomsData) {
 | 
				
			||||||
 | 
								$devicesData = DeviceManager::getAllDevicesInRoom($roomsData['room_id']);
 | 
				
			||||||
 | 
								foreach ($devicesData as $deviceKey => $deviceData) {
 | 
				
			||||||
 | 
									$subDevicesData = SubDeviceManager::getAllSubDevices($deviceData['device_id']);
 | 
				
			||||||
 | 
									foreach ($subDevicesData as $subDeviceKey => $subDeviceData) {
 | 
				
			||||||
 | 
										if ($subDeviceData['type'] != "on/off") continue;
 | 
				
			||||||
 | 
										$devices[] = [
 | 
				
			||||||
 | 
											'id' => $subDeviceData['subdevice_id'],
 | 
				
			||||||
 | 
											'type' => 'action.devices.types.OUTLET',
 | 
				
			||||||
 | 
											'traits' => [ 'action.devices.traits.OnOff' ],
 | 
				
			||||||
 | 
											'name' => [
 | 
				
			||||||
 | 
												'name' => [$deviceData['name']],
 | 
				
			||||||
 | 
											],
 | 
				
			||||||
 | 
											'willReportState' => false,
 | 
				
			||||||
 | 
										];
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$response = [
 | 
				
			||||||
 | 
								'requestId' => $requestId,
 | 
				
			||||||
 | 
								'payload' => [
 | 
				
			||||||
 | 
									'agentUserId'=>'simple-Home',
 | 
				
			||||||
 | 
									'devices' => $devices,],
 | 
				
			||||||
 | 
							];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager = new LogManager('../logs/api/HA/'. date("Y-m-d").'.log');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] request response\n" . json_encode($response, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
							echo json_encode($response);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static function execute($subdeviceId, $payload){
 | 
				
			||||||
 | 
							$commands = [
 | 
				
			||||||
 | 
								'ids' => 
 | 
				
			||||||
 | 
							];
 | 
				
			||||||
 | 
							foreach ($payload['commands'] as $key => $command) {
 | 
				
			||||||
 | 
								foreach ($command['devices'] as $key => $device) {
 | 
				
			||||||
 | 
									$executionCommand = $command['execution'][$key];
 | 
				
			||||||
 | 
									$subDeviceId = $device['id'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									switch ($executionCommand) {
 | 
				
			||||||
 | 
										case 'action.devices.commands.OnOff':
 | 
				
			||||||
 | 
											if ($executionCommand['on'] == true){
 | 
				
			||||||
 | 
												//turn ddeivce on
 | 
				
			||||||
 | 
												
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											break;
 | 
				
			||||||
 | 
										default:
 | 
				
			||||||
 | 
											# code...
 | 
				
			||||||
 | 
											break;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$response = [
 | 
				
			||||||
 | 
								'requestId' => $requestId,
 | 
				
			||||||
 | 
								'payload' => [
 | 
				
			||||||
 | 
									'commands' => $commands,],
 | 
				
			||||||
 | 
							];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager = new LogManager('../logs/api/HA/'. date("Y-m-d").'.log');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] request response\n" . json_encode($response, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
							echo json_encode($response);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function autorize(){
 | 
				
			||||||
 | 
							$json = file_get_contents('php://input');
 | 
				
			||||||
 | 
							$obj = json_decode($json, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager = new LogManager('../logs/api/HA/'. date("Y-m-d").'.log');
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] request body\n" . json_encode($obj, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$apiLogManager->write("[API] GET body\n" . json_encode($_GET, JSON_PRETTY_PRINT), LogRecordType::INFO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//tel: zemanová 607979429
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/*echo json_encode(array (
 | 
				
			||||||
 | 
								'access_token' => '',
 | 
				
			||||||
 | 
								'token_type' => 'bearer',
 | 
				
			||||||
 | 
								'expires_in' => 3600,
 | 
				
			||||||
 | 
								'refresh_token' => '',
 | 
				
			||||||
 | 
								'scope' => 'create',
 | 
				
			||||||
 | 
							));*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$get = [
 | 
				
			||||||
 | 
								"access_token"=>"23165133",
 | 
				
			||||||
 | 
								"token_type"=>"Bearer",
 | 
				
			||||||
 | 
								"expires_in"=>600,
 | 
				
			||||||
 | 
								"state"=>$_GET["state"],
 | 
				
			||||||
 | 
							];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							echo $_GET["redirect_uri"] . '#' . http_build_query($get) ;
 | 
				
			||||||
 | 
							echo '<a href="'.$_GET["redirect_uri"] . '#' . http_build_query($get) . '">FINISH</a>';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,11 @@ class SubDeviceManager
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	public static $devices;
 | 
						public static $devices;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static function getAllSubDevices($deviceId)
 | 
						public static function getAllSubDevices($deviceId = null)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							if ($deviceId == null){
 | 
				
			||||||
 | 
								return Db::loadAll("SELECT * FROM subdevices");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return Db::loadAll("SELECT * FROM subdevices WHERE device_id = ?", array($deviceId));
 | 
							return Db::loadAll("SELECT * FROM subdevices WHERE device_id = ?", array($deviceId));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user