Newer
Older
smart-home-server / server / SHServ / Controllers / DevicesRESTAPIController.php
<?php

namespace SHServ\Controllers;

use \SHServ\Models\Devices;
use \SHServ\Tools\DeviceScanner;

class DevicesRESTAPIController extends \SHServ\Middleware\Controller {
	public function scanning__ready_to_setup() {
		$device_model = new Devices();
		$devices = $device_model -> get_unregistered_devices();

		return $this -> utils() -> response_success([
			"devices" => $devices
		]);
	}

	public function scanning__all() {
		$device_model = new Devices();
		$devices = $device_model -> scanning_localnet(FCONF["device_ip_range"][0], FCONF["device_ip_range"][1]);

		return $this -> utils() -> response_success([
			"devices" => $devices
		]);
	}

	public function setup_new_device($device_ip, $alias, $name, $description) {
		$devices_model = new \SHServ\Models\Devices();
		$result = $devices_model -> connect_new_device($device_ip, $alias, $name, $description);

		if($result and $result instanceof \SHServ\Entities\Device) {
			$device_about = $result -> device_api() -> get_about();
			return $this -> utils() -> response_success([
				"device" => [
					"id" => $result -> id(),
					"alias" => $result -> alias,
					"name" => $result -> name,
					"description" => $result -> description,
					"device" => $device_about["data"]
				]
			]);
		}

		return $this -> utils() -> response_error($result["err_alias"]);
	}

	public function remove_device($device_id) {
		$devices_model  = new Devices();
		$result = $devices_model -> remove_device(intval($device_id));

		if(!$result["result"]) {
			return $this -> utils() -> response_error(
				$result["err_alias"], 
				[], 
				[ "device_msg" => $result["device_msg"] ]
			);
		}

		return $this -> utils() -> response_success([
			"result" => $result["result"] ? true : false,
			"device_msg" => $result["device_msg"]
		]);
	}

	public function reboot_device($device_id) {
		$devices_model = new Devices();
		$result = $devices_model -> reboot_device(intval($device_id));

		if(!$result["result"]) {
			return $this -> utils() -> response_error(
				$result["err_alias"], 
				[], 
				[ "device_msg" => $result["msg"] ?? "" ]
			);
		}

		return $this -> utils() -> response_success([
			"device_msg" => $result["msg"]
		]);
	}

	public function device_info($device_id) {
		$device_id = intval($device_id);
		$devices_model = new Devices();
		$result = $devices_model -> get_device_info($device_id);

		if(!$result) {
			return $this -> utils() -> response_error("device_not_found");
		}

		return $this -> utils() -> response_success([ "device" => $result ]);
	}

	public function device($device_id) {
		$devices_model = new Devices();
		$device = $devices_model -> by_id(intval($device_id));

		if(!$device) {
			return $this -> utils() -> response_error("device_not_found");
		}

		$info = [
			"id" => $device -> id(),
			"alias" => $device -> alias,
			"device_type" => $device -> device_type,
			"device_hard_id" => $device -> device_hard_id,
			"device_mac" => $device -> device_mac,
			"device_ip" => $device -> device_ip,
			"firmware_version" => $device -> firmware_version,
			"name" => $device -> name,
			"description" => $device -> description,
			"state" => $device -> state,
			"connection_state" => $device -> connection_state,
			"last_contact" => $device -> last_contact,
			"create_at" => $device -> create_at
		];

		return $this -> utils() -> response_success([ "device" => $info ]);
	}

	public function device_status($device_id) {
		$devices_model = new Devices();
		$device = $devices_model -> by_id(intval($device_id));

		if(!$device) {
			return $this -> utils() -> response_error("device_not_found");
		}

		$device_status = $device -> device_api() -> get_status();

		if(!$device_status) {
			return $this -> utils() -> response_error("device_request_fail");
		}

		$response_data = [
			"id" => $device -> id(),
			"alias" => $device -> alias,
			"device_response" => $device_status
		];

		return $this -> utils() -> response_success(["device" => $response_data]);
	}

	public function do_device_action($device_id, $action, $params) {
		$devices_model = new Devices();
		$device = $devices_model -> by_id(intval($device_id));

		if(!$device) {
			return $this -> utils() -> response_error("device_not_found");
		}

		$result = $device -> device_api() -> post_action($action, $params);
		$device_response = $result["data"] ?? [];

		if(!$device_response) {
			return $this -> utils() -> response_error("device_request_fail");
		}

		if($device_response["status"] != "ok") {
			return $this -> utils() -> response_error("device_request_fail", [], [
				"device_status" => $device_response["status"],
				"device_error" => $device_response["status"] ?? "",
				"device_msg" => $device_response["message"] ?? ""
			]);
		}

		$response_data = [
			"id" => $device -> id(),
			"alias" => $device -> alias,
			"device_response" => $device_response
		];

		return $this -> utils() -> response_success(["device" => $response_data]);
	}
}