-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Добавлен класс с базовыми функциями для настольных ламп Xiaomi Philips Eyecare Smart Lamp 2.
- Loading branch information
1 parent
fcbf94d
commit c8d666e
Showing
1 changed file
with
182 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
<?php | ||
/* | ||
* Класс для работы с настольными лампами Xiaomi Philips Eyecare Smart Lamp 2 по протоколу miIO. | ||
* | ||
* Copyright (C) 2017 Agaphonov Dmitri aka skysilver [mailto:[email protected]] | ||
* | ||
*/ | ||
|
||
include_once('miio.class.php'); | ||
|
||
class philipsEyecare2 { | ||
|
||
public $ip = ''; | ||
public $token = ''; | ||
public $debug = ''; | ||
public $error = ''; | ||
|
||
public $status = array('power' => '', | ||
'bright' => '', | ||
'notifystatus' => '', | ||
'ambstatus' => '', | ||
'ambvalue' => '', | ||
'eyecare' => '', | ||
'scene_num' => '', | ||
'bls' => '', | ||
'dvalue' => ''); | ||
|
||
public $dev = NULL; | ||
|
||
public function __construct($ip = NULL, $bind_ip = NULL, $token = NULL, $debug = false) { | ||
|
||
$this->ip = $ip; | ||
$this->token = $token; | ||
$this->debug = $debug; | ||
|
||
if ($bind_ip != NULL) $this->bind_ip = $bind_ip; | ||
else $this->bind_ip = '0.0.0.0'; | ||
|
||
$this->dev = new miIO($this->ip, $this->bind_ip, $this->token, $this->debug); | ||
|
||
} | ||
|
||
/* | ||
Активирует авто-формирование уникальных ID сообщений с их сохранением в файл id.json | ||
*/ | ||
|
||
public function enableAutoMsgID() { | ||
|
||
$this->dev->useAutoMsgID = true; | ||
|
||
} | ||
|
||
/* | ||
Деактивирует авто-формирование уникальных ID сообщений с их сохранением в файл id.json | ||
ID сообщений необходимо передавать в виде аргумента при каждой отправке команды, | ||
либо не указывать вообще, тогда ID будет 1 для всех сообщений. | ||
*/ | ||
|
||
public function disableAutoMsgID() { | ||
|
||
$this->dev->useAutoMsgID = false; | ||
|
||
} | ||
|
||
/* | ||
Получить расширенные сведения | ||
*/ | ||
|
||
public function getInfo($msg_id = 1) { | ||
|
||
if ($this->dev->getInfo($msg_id)) return $this->dev->data; | ||
else return false; | ||
|
||
} | ||
|
||
/* | ||
Получить текущий статус: | ||
power - питание (on или off), | ||
bright - яркость (от 1 до 100), | ||
notifystatus - напоминание об усталости глаз, | ||
ambstatus - доп. боковая подсветка (on или off), | ||
ambvalue - яркость доп. боковой подсветки (от 1 до 100), | ||
eyecare - смарт режим безопасный для глаз (???), | ||
scene_num - номер сцены (от 1 до 3, study, reading, phone) | ||
bls - режим смарт-ночника (???), | ||
dvalue - таймер на выключение, макс. 60 минут (в минутах от 1 до 60). | ||
*/ | ||
|
||
public function getStatus($msg_id = 1) { | ||
|
||
$result = $this->dev->msgSendRcv('get_prop', '["power","bright","notifystatus","ambstatus","ambvalue","eyecare","scene_num","bls","dvalue"]', $msg_id); | ||
|
||
if ($result) { | ||
if ($this->dev->data != '') { | ||
$res = json_decode($this->dev->data); | ||
if (isset($res->{'result'})) { | ||
$i = 0; | ||
foreach($this->status as $key => $value) { | ||
$this->status[$key] = $res->{'result'}[$i]; | ||
$i++; | ||
} | ||
return true; | ||
} else if (isset($res->{'error'})) { | ||
$this->error = $res->{'error'}->{'message'}; | ||
return false; | ||
} | ||
} else { | ||
$this->error = 'Нет данных'; | ||
return false; | ||
} | ||
} else { | ||
$this->error = 'Ответ не получен'; | ||
return false; | ||
} | ||
|
||
} | ||
|
||
/* | ||
Включить | ||
*/ | ||
|
||
public function powerOn($msg_id = 1) { | ||
|
||
$result = $this->dev->msgSendRcv('set_power', '["on"]', $msg_id); | ||
return $this->verify($result); | ||
|
||
} | ||
|
||
/* | ||
Выключить | ||
*/ | ||
|
||
public function powerOff($msg_id = 1) { | ||
|
||
$result = $this->dev->msgSendRcv('set_power', '["off"]', $msg_id); | ||
return $this->verify($result); | ||
|
||
} | ||
|
||
/* | ||
Установка яркости | ||
*/ | ||
|
||
public function setBrightness($level = 50, $msg_id = 1) { | ||
|
||
if ( ($level < 1) or ($level > 100) ) $level = 50; | ||
$result = $this->dev->msgSendRcv('set_bright', "[$level]", $msg_id); | ||
return $this->verify($result); | ||
|
||
} | ||
|
||
/* | ||
Проверка ответа | ||
*/ | ||
|
||
private function verify ($result) { | ||
|
||
if ($result) { | ||
if ($this->dev->data != '') { | ||
$res = json_decode($this->dev->data); | ||
if (isset($res->{'result'})) { | ||
if ($res->{'result'}[0] == 'ok') return true; | ||
if ($res->{'result'}[0] == 'error') { | ||
$this->error = 'Unknown error.'; | ||
return false; | ||
} | ||
} else if (isset($res->{'error'})) { | ||
$this->error = $res->{'error'}->{'message'}; | ||
return false; | ||
} | ||
} else { | ||
$this->error = 'Нет данных'; | ||
return false; | ||
} | ||
} else { | ||
$this->error = 'Ответ не получен'; | ||
return false; | ||
} | ||
|
||
} | ||
|
||
} |