<?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]);
}
}