123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <?php
- namespace App\Server;
- use AlibabaCloud\Client\AlibabaCloud;
- use AlibabaCloud\Client\Exception\ClientException;
- use AlibabaCloud\Client\Exception\ServerException;
- use Illuminate\Support\Facades\Log;
- class AliYunIotServer
- {
- protected $errMsg;
- private $appKey;
- private $appSecret;
- private $regionId;
- const DISABLE = 0;
- const ENABLE = 1;
- /**
- * AliYunIotServer constructor.
- * @param string $appKey
- * @param string $appSecret
- * @param string $regionId
- */
- public function __construct(string $appKey, string $appSecret, string $regionId = 'cn-hangzhou')
- {
- $this->appKey = $appKey;
- $this->appSecret = $appSecret;
- $this->regionId = $regionId;
- }
- /**
- * 获取服务列表
- * @param int $pageSize
- * @param int $currentPage
- * @return array|string
- */
- public function getProductList(int $pageSize = 5, int $currentPage = 1)
- {
- $params = [
- 'RegionId' => $this->regionId,
- 'PageSize' => "$pageSize",
- 'CurrentPage' => "$currentPage",
- ];
- return $this->AliCurl("post", "QueryProductList", $params);
- }
- /**
- * 获取设备列表
- * @param string $productKey
- * @param int $pageSize
- * @param int $currentPage
- * @return array|string
- */
- public function getDeviceList(string $productKey, int $pageSize = 5, int $currentPage = 1)
- {
- $params = [
- 'RegionId' => $this->regionId,
- 'PageSize' => "$pageSize",
- 'ProductKey' => "$productKey",
- 'CurrentPage' => "$currentPage",
- ];
- return $this->AliCurl("post", "QueryDevice", $params);
- }
- /**
- * 获取设备属性
- * @param string $iotId
- * @param string $iotInstanceId
- * @return array|string
- */
- public function getDeviceProperty(string $iotId, string $iotInstanceId = '')
- {
- $params['IotId'] = $iotId;
- $params['RegionId'] = $this->regionId;
- /*foreach ($identifier as $key => $val) {
- $params['Identifier.' . ($key + 1)] = $val;
- }*/
- if ($iotInstanceId) {
- $params['IotInstanceId'] = $iotInstanceId;
- }
- return $this->AliCurl("post", "QueryDevicePropertyStatus", $params);
- }
- /**
- * 获取设备状态
- * @param string $iotId
- * @param string $iotInstanceId
- * @return array|string
- */
- public function getDeviceStatus(string $iotId, string $iotInstanceId = '')
- {
- $params['IotId'] = $iotId;
- $params['RegionId'] = $this->regionId;
- /*foreach ($identifier as $key => $val) {
- $params['Identifier.' . ($key + 1)] = $val;
- }*/
- if ($iotInstanceId) {
- $params['IotInstanceId'] = $iotInstanceId;
- }
- return $this->AliCurl("post", "GetDeviceStatus", $params);
- }
- /**
- * 设置设备属性
- * @param string $iotId
- * @param array $property
- * @param string $iotInstanceId
- * @return array|string
- */
- public function setDeviceProperty(string $iotId, array $property, string $iotInstanceId = '')
- {
- /*if ($this->checkProperty($property)) {
- return $this->errMsg;
- }*/
- $params['Items'] = json_encode($property);
- //dd($params);
- Log::info("手动上报设备属性" . $params['Items']);
- $params['IotId'] = $iotId;
- if ($iotInstanceId) {
- $params['IotInstanceId'] = $iotInstanceId;
- }
- //dd($params);
- return $this->AliCurl("post", "SetDeviceProperty", $params);
- }
- /**
- * 调用设备服务
- * @param string $iotId
- * @param string $identifier
- * @param object $args
- * @param string $iotInstanceId
- * @return array|string
- */
- public function invokeThingService(string $iotId, string $identifier, object $args, string $iotInstanceId = '')
- {
- $params['IotId'] = $iotId;
- $params['Identifier'] = $identifier;
- $params['Args'] = json_encode($args);
- if ($iotInstanceId) {
- $params['IotInstanceId'] = $iotInstanceId;
- }
- return $this->AliCurl("post", "InvokeThingService", $params);
- }
- /**
- * 禁用&解禁设备
- * @param int $status
- * @param string $iotId
- * @param string $iotInstanceId
- * @return array|string
- */
- public function switchDevice(int $status, string $iotId, string $iotInstanceId = '')
- {
- $params['IotId'] = $iotId;
- if ($iotInstanceId) {
- $params['IotInstanceId'] = $iotInstanceId;
- }
- if ($status == self::DISABLE) {
- return $this->AliCurl("post", "DisableThing", $params);
- } else if ($status == self::ENABLE) {
- return $this->AliCurl("post", "EnableThing", $params);
- }
- }
- /**
- * @param string $method
- * @param string $action
- * @param array $params
- * @return array|string
- */
- private function AliCurl(string $method, string $action, array $params = [])
- {
- try {
- AlibabaCloud::accessKeyClient($this->appKey, $this->appSecret)
- ->regionId($this->regionId)
- ->asDefaultClient();
- $result = AlibabaCloud::rpc()
- ->product('Iot')
- // ->scheme('https') // https | http
- ->version('2018-01-20')
- ->action($action)
- ->method(strtoupper($method))
- ->host('iot.cn-shanghai.aliyuncs.com')
- ->options([
- 'query' => $params
- ])
- ->request();
- return $result->toarray();
- } catch (ClientException $e) {
- return $e->getErrorMessage() . PHP_EOL;
- } catch (ServerException $e) {
- return $e->getErrorMessage() . PHP_EOL;
- }
- }
- /**
- * @param array $params
- * @return bool
- */
- protected function checkProperty(array $params)
- {
- $initialProperty = ['LockSwitch' => 'is_bool'];
- foreach ($params as $key => $val) {
- if (!isset($initialProperty[$key])) {
- $this->errMsg = '该属性未定义';
- return false;
- }
- if ($initialProperty[$key]($val)) {
- $this->errMsg = '该属性数据类型异常';
- return false;
- }
- if ($val == '' || $val == [] || $val == null) {
- $this->errMsg = '属性不能为空';
- return false;
- }
- }
- return true;
- }
- }
|