导航链接
(1)香橙派+apache2与php+天猫精灵=自建平台语音支持--前言
(2)香橙派+apache2与php+天猫精灵=自建平台语音支持--香橙派操作系统安装
(3)香橙派+apache2与php+天猫精灵=自建平台语音支持--香橙派环境配置
(4)香橙派+apache2与php+天猫精灵=自建平台语音支持--apache2与php
(5)香橙派+apache2与php+天猫精灵=自建平台语音支持--MariaDB的安装
(6)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接1
(7)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接2
(8)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接3
(9)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接4
(10)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接5
(11)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接6
(12)香橙派+apache2与php+天猫精灵=自建平台语音支持--天猫精灵对接7
设备查询
还是先上个时序图,看图基本功能也就都知道了。
下图为设备响应指令的详细协议以及协议的解析和响应
case 'AliGenie.Iot.Device.Query': {
error_log('----case in Query----');
$result = device_status($obj, $messageId);
break;
}
协议的解析和设备控制协议的解析采用的思想差不多,只不过查询和控制这两个过程是正好相反的。过程控制是主动存储数据,然后又硬件设备读取,查询是硬件设备返回数据存储到服务器上在查询的时候读取。就这样,具体的代码看aligenies_handle.php中的内容吧,这里会调用存储读取的具体PHP。
function device_status($obj, $messageId)
{
error_log('----device_status in----');
global $sqlFileName;
$deviceId = $obj->payload->deviceId;
$action = '';
$deviceType = check_type_from_id($deviceId);
switch ($obj->header->name) {
case 'QueryPowerState':
$action = 'powerstate';
break;
case 'QueryColor':
$action = 'color';
break;
case "QueryTemperature":
$action = "temperature";
break;
case "QueryWindspeed":
$action = "windspeed";
break;
case "QueryBrightness":
$action = "brightness";
break;
case "QueryFog":
$action = "fog";
break;
case "QueryHumidity":
$action = "humidity";
break;
case "QueryPm25":
$action = "pm25";
break;
case "QueryChannel":
$action = "channel";
break;
case "QueryNumber":
$action = "number";
break;
case "QueryDirection":
$action = "direction";
break;
case "QueryAngle":
$action = "angle";
break;
case "QueryAnion":
$action = "anion";
break;
case "QueryEffluent":
$action = "effluent";
break;
case "QueryMode":
$action = "mode";
break;
case "QueryLeftTime":
$action = "lefttime";
break;
case "QueryRemoteStatus":
$action = "remotestatus";
break;
case "QueryOnlineState":
$action = "onlinestate";
break;
case "QueryColorTemperature":
$action = "colorTemperature";
break;
case "Query":
$action = "all";
break;
default:
$action = "";
}
if ($action == "" || $deviceType == "") {
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("DEVICE_NOT_SUPPORT_FUNCTION");
$retJson = json_encode($ret);
return $retJson;
}
$properties = array();
$findDevice = false;
$queryValue = '';
if (($txtRes = fopen($sqlFileName, "r")) === false) {
error_log('----get_control fopen failed----');
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("SERVICE_ERROR", "CANNOT_OPEN");
$retJson = json_encode($ret);
return $retJson;
}
$str = fread($txtRes, filesize($sqlFileName));
$sqlObj = json_decode($str);
$devArray = $sqlObj->dev_array;
$ret = new AliGenie\QueryResponse();
$ret->header->putResponseName($obj->header->name);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
foreach ($devArray as $data) {
error_log('entity_id-->'.$data->entity_id);
error_log('device_type-->'.$data->device_type);
if ($data->entity_id == $deviceId) {
$findDevice = true;
switch ($data->device_type) {
case 'ceiling_lamp': {
$brightnessWhite = '';
$brightnessYellow = '';
foreach ($data->properties as $element) {
error_log('name-->'.$element->name);
error_log('value-->'.$element->value);
if ($element->name =='brightness_w') {
$brightnessWhite = $element->value;
} elseif ($element->name =='brightness_y') {
$brightnessYellow = $element->value;
} else {
$properties[$element->name] = $element->value;
}
}
$properties['brightness'] = ($brightnessWhite>$brightnessYellow)?$brightnessWhite:$brightnessYellow;
if ($brightnessWhite != 0 && $brightnessYellow == 0) {
$properties['color'] = 'White';
} elseif ($brightnessWhite == 0 && $brightnessYellow != 0) {
$properties['color'] = 'Yellow';
} elseif ($brightnessWhite == $brightnessYellow && $brightnessYellow != 0) {
$properties['mode'] = '自然模式';
}
break;
}
}
}
}
fclose($txtRes);
if ($action != 'all') {
$queryValue = $properties[$obj->header->name];
array_splice($properties, 0);
$properties[$obj->header->name] = $queryValue;
}
foreach ($properties as $name => $value) {
$pro = new AliGenie\QueryPropertie($name, $value);
$ret->properties[] = $pro;
}
if ($findDevice == false) {
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("DEVICE_IS_NOT_EXIST");
$retJson = json_encode($ret);
return $retJson;
} else if ($queryValue == '' && $action != 'all') {
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("INVALIDATE_PARAMS");
$retJson = json_encode($ret);
return $retJson;
}
$retJson = json_encode($ret);
error_log('----device_status out----');
return $retJson;
}
到这里所有的文件部署完毕,我们现在天猫精灵上新建一个智能家居,用于真机测试。
下面是
aligenies_gate.php和aligenies_handle.php完整文件的代码。
aligenies_gate.php
<?php
error_log('----aligenies_gate.php in----');
require_once __DIR__.'/aligenies_handle.php';
$chars = md5(uniqid(mt_rand(), true));
$uuid = substr($chars,0,8) . '-';
$uuid .= substr($chars,8,4) . '-';
$uuid .= substr($chars,12,4) . '-';
$uuid .= substr($chars,16,4) . '-';
$uuid .= substr($chars,20,12);
$postStr = file_get_contents("php://input");
$obj = json_decode($postStr);
$messageId = $uuid;
error_log('get-request->'.$postStr);
switch ($obj->header->namespace) {
case 'AliGenie.Iot.Device.Discovery': {
error_log('----case in Discovery----');
$result = device_discovery($messageId);
break;
}
case 'AliGenie.Iot.Device.Control': {
error_log('----case in Control----');
$result = device_control($obj, $messageId);
break;
}
case 'AliGenie.Iot.Device.Query': {
error_log('----case in Query----');
$result = device_status($obj, $messageId);
break;
}
default: {
$result='Nothing return,there is an error~!!';
}
}
echo($result);
error_log('----reseponse----');
error_log($result);
error_log('----aligenies_gate.php out----');
?>
aligenies_handle.php
<?php
require_once __DIR__.'/DiscoveryResponse.php';
require_once __DIR__.'/ControlResponse.php';
require_once __DIR__.'/QueryResponse.php';
$sqlFileName = "../sqldata.txt";
function device_discovery($messageId)
{
error_log('----device_discovery in----');
global $sqlFileName;
if (($txtRes = fopen($sqlFileName, "r")) === false) {
error_log('----gate_implement fopen failed----');
$ret = new AliGenie\DiscoveryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseError("SERVICE_ERROR", "CANNOT_OPEN");
$retJson = json_encode($ret);
return $retJson;
}
$str = fread($txtRes, filesize($sqlFileName));
error_log("str-->".$str);
$obj = json_decode($str);
$ret = new AliGenie\DiscoveryResponse();
$ret->header->putResponseMessageId($messageId);
foreach ($obj->dev_array as $devElement) {
error_log('entity_id-->'.$devElement->entity_id);
switch ($devElement->device_type) {
case 'ceiling_lamp': {
$dev = new AliGenie\DiscoveryDevice();
$dev->putResponseDeviceInfo($devElement->entity_id, "吸顶灯", device_id_to_devicetype($devElement->entity_id),
"https://www.rtplay.cn/icon/td.png");
$dev->actions = array("TurnOn",
"TurnOff",
"SetBrightness",
"SetColor",
"AdjustUpBrightness",
"AdjustDownBrightness",
"QueryBrightness",
"QueryPowerState",
"QueryColor",
"Query");
$brightnessWhite = '';
$brightnessYellow = '';
foreach ($devElement->properties as $propertie) {
if ($propertie->name =='brightness_w') {
$brightnessWhite = $propertie->value;
} elseif ($propertie->name =='brightness_y') {
$brightnessYellow = $propertie->value;
} else {
$pro = new AliGenie\DiscoveryPropertie($propertie->name, $propertie->value);
$dev->putResponseProperties($pro);
}
}
$brightness = ($brightnessWhite>$brightnessYellow)?$brightnessWhite:$brightnessYellow;
$pro = new AliGenie\DiscoveryPropertie("brightness", $brightness);
$dev->putResponseProperties($pro);
if ($brightnessWhite == 100 && $brightnessYellow == 0) {
$pro = new AliGenie\DiscoveryPropertie("color", "White");
$dev->putResponseProperties($pro);
} elseif ($brightnessWhite == 0 && $brightnessYellow == 100) {
$pro = new AliGenie\DiscoveryPropertie("color", "Yellow");
$dev->putResponseProperties($pro);
} elseif ($brightnessWhite == $brightnessYellow && $brightnessYellow != 0) {
$pro = new AliGenie\DiscoveryPropertie("mode", "自然模式");
$dev->putResponseProperties($pro);
}
$ext = new AliGenie\DiscoveryExtension();
$dev->putResponseExtensions($ext);
$ret->payload->putResponseDevices($dev);
break;
}
case 'gateway_switch': {
$dev = new AliGenie\DiscoveryDevice();
$dev->putResponseDeviceInfo($devElement->entity_id, "插排", device_id_to_devicetype($devElement->entity_id),
"https://www.rtplay.cn/icon/cz.png");
$dev->actions = array("TurnOn",
"TurnOff",
"QueryPowerState",
"Query");
foreach ($devElement->properties as $propertie) {
$pro = new AliGenie\DiscoveryPropertie($propertie->name, $propertie->value);
$dev->putResponseProperties($pro);
}
$ext = new AliGenie\DiscoveryExtension();
$dev->putResponseExtensions($ext);
$ret->payload->putResponseDevices($dev);
break;
}
}
}
$retJson = json_encode($ret);
error_log('retJson-->'.$retJson);
error_log('----device_discovery out----');
return $retJson;
}
function device_status($obj, $messageId)
{
error_log('----device_status in----');
global $sqlFileName;
$deviceId = $obj->payload->deviceId;
$action = '';
$deviceType = check_type_from_id($deviceId);
switch ($obj->header->name) {
case 'QueryPowerState':
$action = 'powerstate';
break;
case 'QueryColor':
$action = 'color';
break;
case "QueryTemperature":
$action = "temperature";
break;
case "QueryWindspeed":
$action = "windspeed";
break;
case "QueryBrightness":
$action = "brightness";
break;
case "QueryFog":
$action = "fog";
break;
case "QueryHumidity":
$action = "humidity";
break;
case "QueryPm25":
$action = "pm25";
break;
case "QueryChannel":
$action = "channel";
break;
case "QueryNumber":
$action = "number";
break;
case "QueryDirection":
$action = "direction";
break;
case "QueryAngle":
$action = "angle";
break;
case "QueryAnion":
$action = "anion";
break;
case "QueryEffluent":
$action = "effluent";
break;
case "QueryMode":
$action = "mode";
break;
case "QueryLeftTime":
$action = "lefttime";
break;
case "QueryRemoteStatus":
$action = "remotestatus";
break;
case "QueryOnlineState":
$action = "onlinestate";
break;
case "QueryColorTemperature":
$action = "colorTemperature";
break;
case "Query":
$action = "all";
break;
default:
$action = "";
}
if ($action == "" || $deviceType == "") {
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("DEVICE_NOT_SUPPORT_FUNCTION");
$retJson = json_encode($ret);
return $retJson;
}
$properties = array();
$findDevice = false;
$queryValue = '';
if (($txtRes = fopen($sqlFileName, "r")) === false) {
error_log('----get_control fopen failed----');
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("SERVICE_ERROR", "CANNOT_OPEN");
$retJson = json_encode($ret);
return $retJson;
}
$str = fread($txtRes, filesize($sqlFileName));
$sqlObj = json_decode($str);
$devArray = $sqlObj->dev_array;
$ret = new AliGenie\QueryResponse();
$ret->header->putResponseName($obj->header->name);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
foreach ($devArray as $data) {
error_log('entity_id-->'.$data->entity_id);
error_log('device_type-->'.$data->device_type);
if ($data->entity_id == $deviceId) {
$findDevice = true;
switch ($data->device_type) {
case 'ceiling_lamp': {
$brightnessWhite = '';
$brightnessYellow = '';
foreach ($data->properties as $element) {
error_log('name-->'.$element->name);
error_log('value-->'.$element->value);
if ($element->name =='brightness_w') {
$brightnessWhite = $element->value;
} elseif ($element->name =='brightness_y') {
$brightnessYellow = $element->value;
} else {
$properties[$element->name] = $element->value;
}
}
$properties['brightness'] = ($brightnessWhite>$brightnessYellow)?$brightnessWhite:$brightnessYellow;
if ($brightnessWhite != 0 && $brightnessYellow == 0) {
$properties['color'] = 'White';
} elseif ($brightnessWhite == 0 && $brightnessYellow != 0) {
$properties['color'] = 'Yellow';
} elseif ($brightnessWhite == $brightnessYellow && $brightnessYellow != 0) {
$properties['mode'] = '自然模式';
}
break;
}
}
}
}
fclose($txtRes);
if ($action != 'all') {
$queryValue = $properties[$obj->header->name];
array_splice($properties, 0);
$properties[$obj->header->name] = $queryValue;
}
foreach ($properties as $name => $value) {
$pro = new AliGenie\QueryPropertie($name, $value);
$ret->properties[] = $pro;
}
if ($findDevice == false) {
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("DEVICE_IS_NOT_EXIST");
$retJson = json_encode($ret);
return $retJson;
} else if ($queryValue == '' && $action != 'all') {
$ret = new AliGenie\QueryResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseDeviceId($deviceId);
$ret->payload->putResponseError("INVALIDATE_PARAMS");
$retJson = json_encode($ret);
return $retJson;
}
$retJson = json_encode($ret);
error_log('----device_status out----');
return $retJson;
}
function device_control($obj, $messageId)
{
error_log('----device_control in----');
global $sqlFileName;
$deviceId = $obj->payload->deviceId;
$action = '';
$deviceType = '';//Customize device type
$deviceType = device_id_to_type($deviceId);
error_log("deviceType-->".$deviceType);
$action = get_control_action($obj->header->name);
error_log("action-->".$action);
if ($action == "" || $deviceType == "") {
error_log('----get_control_action failed----');
$ret = new AliGenie\ControlResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseError("SERVICE_ERROR",
"action or device not support,name:".$obj->header->name." device:".substr($deviceId,0,stripos($deviceId,".")));
$retJson = json_encode($ret);
return $retJson;
}
$validArray = array (
"deviceId" => $deviceId,
"deviceType" => $deviceType,
"actionName" => $obj->header->name,
"action" => $action,
"attribute" => $obj->payload->attribute,
"value" => $obj->payload->value
);
$checkResult = control_checker($validArray);
if ($checkResult != 'succeed') {
error_log('----control_checker failed----');
$ret = new AliGenie\ControlResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseError("DEVICE_NOT_SUPPORT_FUNCTION");
$retJson = json_encode($ret);
return $retJson;
}
//-----------------------------------
if (($txtRes = fopen($sqlFileName, "r+")) === false) {
error_log('----get_control fopen failed----');
$ret = new AliGenie\ControlResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseError("SERVICE_ERROR", "CANNOT_OPEN");
$retJson = json_encode($ret);
return $retJson;
}
$str = fread($txtRes, filesize($sqlFileName));
error_log("str-->".$str);
$sqlObj = json_decode($str);
//error_log("sqlObj-->".print_r($sqlObj, true));
$ret = new AliGenie\ControlResponse();
$ret->header->putResponseMessageId($messageId);
$ret->header->putResponseName($obj->header->name);
$ret->payload->putResponseDeviceId($obj->payload->deviceId);
foreach ($sqlObj->dev_array as $devElement) {
error_log('entity_id-->'.$devElement->entity_id);
if ($devElement->entity_id == $validArray['deviceId']) {
$ret->payload->putResponseDeviceId($devElement->entity_id);
switch ($devElement->device_type) {
case 'ceiling_lamp': {
switch ($validArray['action']) {
case 'turn_on': {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "powerstate") {
$propertie->value = "on";
break;
}
}
break;
}
case 'turn_off': {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "powerstate") {
$propertie->value = "off";
break;
}
}
break;
}
case 'bright_set': {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w" && $propertie->value != 0) {
$propertie->value = $validArray['value'];
} else if ($propertie->name == "brightness_y" && $propertie->value != 0) {
$propertie->value = $validArray['value'];
}
}
break;
}
case 'bright_up': {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w" && $propertie->value != 0) {
$propertie->value += $validArray['value'];
if ($propertie->value > 100) {
$propertie->value = 100;
}
} else if ($propertie->name == "brightness_y" && $propertie->value != 0) {
$propertie->value += $validArray['value'];
if ($propertie->value > 100) {
$propertie->value = 100;
}
}
if ($propertie->name == "powerstate") {
$propertie->value = "on";
break;
}
}
break;
}
case 'bright_down': {
$brightnessWhite = '10';
$brightnessYellow = '10';
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w" && $propertie->value != 0) {
$propertie->value -= $validArray['value'];
if ($propertie->value < 0) {
$propertie->value = 0;
}
$brightnessWhite = $propertie->value;
} else if ($propertie->name == "brightness_y" && $propertie->value != 0) {
$propertie->value -= $validArray['value'];
if ($propertie->value < 0) {
$propertie->value = 0;
}
$brightnessYellow = $propertie->value;
}
if ($brightnessWhite == 0 && $brightnessYellow == 0) {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "powerstate") {
$propertie->value = "off";
break;
}
}
}
}
break;
}
case 'mode_set': {
$brightnessWhite = '0';
$brightnessYellow = '0';
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w") {
$brightnessWhite = $propertie->value;
} else if ($propertie->name == "brightness_y") {
$brightnessYellow = $propertie->value;
}
}
$brightness = ($brightnessWhite>$brightnessYellow)?$brightnessWhite:$brightnessYellow;
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w" || $propertie->name == "brightness_y") {
$propertie->value = $brightness;
}
}
break;
}
case 'color_set': {
if ($validArray['value'] == 'White') {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w") {
$propertie->value = 100;
} else if ($propertie->name == "brightness_y") {
$propertie->value = 0;
}
}
} else if ($validArray['value'] == 'Yellow') {
foreach ($devElement->properties as $propertie) {
error_log('name-->'.$propertie->name);
if ($propertie->name == "brightness_w") {
$propertie->value = 0;
} else if ($propertie->name == "brightness_y") {
$propertie->value = 100;
}
}
}
break;
}
}
break;
}
}
}
}
$jsonData = json_encode($sqlObj);
error_log('jsonData-->'.$jsonData);
fclose($txtRes);
if (($txtRes = fopen($sqlFileName, "w+")) === false) {
error_log('----get_control fopen failed----');
$ret = new AliGenie\ControlResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseError("SERVICE_ERROR", "CANNOT_OPEN");
$retJson = json_encode($ret);
return $retJson;
}
if (!fwrite($txtRes, $jsonData)) {
fclose($txtRes);
error_log('----get_control fwrite failed----');
$ret = new AliGenie\ControlResponse(true);
$ret->header->putResponseMessageId($messageId);
$ret->payload->putResponseError("SERVICE_ERROR", "CANNOT_WRITE");
$retJson = json_encode($ret);
return $retJson;
}
fclose($txtRes);
$retJson = json_encode($ret);
error_log('----device_control out----');
return $retJson;
}
function check_type_from_id($deviceId)
{
$deviceType = device_id_to_type($deviceId);
if ($deviceType != 'ceiling_lamp' && $deviceType != 'gateway_switch') {
$deviceType = "";
}
return $deviceType;
}
function get_control_action($controlName)
{
$action = "";
switch ($controlName) {
case 'TurnOn':
$action = 'turn_on';
break;
case 'TurnOff':
$action = 'turn_off';
break;
case 'SelectChannel':
$action = 'channel_set';
break;
case 'AdjustUpChannel':
$action = 'channel_up';
break;
case 'AdjustDownChannel':
$action = 'channel_down';
break;
case 'AdjustUpVolume':
$action = 'volume_up';
break;
case 'AdjustDownVolume':
$action = 'volume_down';
break;
case 'SetVolume':
$action = 'volume_set';
break;
case 'SetMute':
$action = 'mute_set';
break;
case 'CancelMute':
$action = 'mute_cancel';
break;
case 'Play':
$action = 'play';
break;
case 'Pause':
$action = 'pause';
break;
case 'Continue':
$action = 'continue';
break;
case 'Next':
$action = 'next';
break;
case 'Previous':
$action = 'previous';
break;
case 'SetBrightness':
$action = 'bright_set';
break;
case 'AdjustUpBrightness':
$action = 'bright_up';
break;
case 'AdjustDownBrightness':
$action = 'bright_down';
break;
case 'SetTemperature':
$action = 'temperature_set';
break;
case 'AdjustUpTemperature':
$action = 'temperature_up';
break;
case 'AdjustDownTemperature':
$action = 'temperature_down';
break;
case 'SetWindSpeed':
$action = 'windspeed_set';
break;
case 'AdjustUpWindSpeed':
$action = 'WindSpeed_up';
break;
case 'AdjustDownWindSpeed':
$action = 'WindSpeed_down';
break;
case 'SetMode':
$action = 'mode_set';
break;
case 'SetColor':
$action = 'color_set';
break;
case 'OpenFunction':
$action = 'function_open';
break;
case 'CloseFunction':
$action = 'function_close';
break;
case 'Cancel':
$action = 'cancel';
break;
case 'CancelMode':
$action = 'mode_cancel';
break;
default:
break;
}
return $action;
}
function device_id_to_type($deviceId)
{
$deviceType = "";
$deviceArray = [];
$deviceArray = explode('.', $deviceId);
$deviceType = $deviceArray[1];
return $deviceType;
}
function device_id_to_devicetype($deviceId)
{
$deviceType = "";
$deviceArray = [];
$deviceArray = explode('.', $deviceId);
$deviceType = $deviceArray[0];
return $deviceType;
}
function control_checker($arrayData)
{
error_log('----control_checker in----');
if (empty($arrayData)) {
return "jsonData null";
}
switch ($arrayData['deviceType']) {
case 'ceiling_lamp': {
if ($arrayData['attribute'] == 'powerstate' ||
$arrayData['attribute'] == 'brightnessStep' ||
$arrayData['attribute'] == 'brightness' ) {//Full Support Request Action
return 'succeed';
}
if ($arrayData['attribute'] == 'mode' && $arrayData['value'] == '自然模式') {
return 'succeed';
}
if ($arrayData['attribute'] == 'color' && ($arrayData['value'] == 'White' || $arrayData['value'] == 'Yellow')) {
return 'succeed';
}
return 'failed';
}
break;
case 'gateway_switch': {
}
break;
default:
break;
}
error_log('----control_checker out----');
}
?>