Skip to content
Permalink
Browse files

v.0.4-beta [Версия для тестирования]

* Добавлена поддержка умений **volume**, **channel**, **mute** для медиа-устройств.
* Обновлена справка.
* Обновлен readme.
  • Loading branch information...
skysilver-lab committed Jun 20, 2019
1 parent ed085a6 commit e965fae3386436960618cc4b49d7a04b9b90f156
@@ -29,9 +29,12 @@ ____
| # | Метрика (умение) | Описание | Значения в модуле | Значения от Яндекс |
| -------- | -------- | -------- | -------- | -------- |
| 1 | on | Включить/выключить (1 - включено, 0 выключено). | 1 и 0 | true и false |
| 2 | brightness | Яркость (проценты). | 1 - 100 | 1 - 100 |
| 3 | rgb | Цвет в формате RGB (hex). | 000000 - FFFFFF | 0 - 16777215 |
| 4 | temperature_k | Температура цвета (кельвины). | 2700 - 9000 | 2700 - 9000 |
| 2 | volume | Громкость (проценты). | 1 - 100 | 1 - 100, либо +1/-1 |
| 3 | channel | ТВ-канал. | № канала | № канала, либо +1/-1 |
| 4 | temperature_k | Температура цвета (кельвины). | 2700 - 9000 | 2700 - 9000 |
| 5 | mute | Режим без звука (1 - включено, 0 выключено). | 1 и 0 | true и false |
| 6 | rgb | Цвет в формате RGB (hex). | 000000 - FFFFFF | 0 - 16777215 |
| 7 | brightness | Яркость (проценты). | 1 - 100 | 1 - 100 |

____
### **Требования**
@@ -239,6 +242,9 @@ ____
### **Дополнительная информация и ссылки**
* Обсуждение модуля на **[Форуме](https://mjdm.ru/forum/viewtopic.php?f=5&t=6498)**
* Модуль в **[Connect](https://connect.smartliving.ru/tasks/482.html)**
* [Алиса, включи свет на кухне.](https://connect.smartliving.ru/profile/461/blog/majordomo-i-yandeks-alisa-alisa-vklyuchi-svet-na-kuhne.html)
* [Алиса, сделай ярче настольную лампу.](https://connect.smartliving.ru/profile/461/blog/majordomo-i-yandeks-alisa-alisa-uvelich-yarkost-nastolnoy-lampy.html)
* [Алиса, измени цвет бра на красный.](https://connect.smartliving.ru/profile/461/blog/majordomo-i-yandeks-alisa-alisa-izmeni-cvet-bra-na-krasnyy.html)

____
#### [Поддержать разработку и развитие модуля](https://connect.smartliving.ru/tasks/482.html)
@@ -1,9 +1,5 @@
<?php
//ini_set ('display_errors', 1);
//error_reporting (E_ALL);
chdir (dirname (__FILE__) . '/../../');
include_once ('./config.php');
@@ -71,37 +71,37 @@
'on' => [
'instance_name' => 'on',
'description' => 'Включить/выключить',
'capabilitie' => 'on_off',
'capability' => 'on_off',
'default_value' => 0
],/*
],
'volume' => [
'instance_name' => 'volume',
'description' => 'Громкость',
'capabilitie' => 'range',
'default_value' => 10,
'capability' => 'range',
'default_value' => 1,
'parameters' => [
'unit' => 'unit.percent',
'range' => [
'min' => 0,
'min' => 1,
'max' => 100,
'precision' => 1
]
]
],
'channel' => [
'instance_name' => 'channel',
'description' => 'Канал',
'capabilitie' => 'range'
],
'description' => 'ТВ-канал',
'capability' => 'range',
'default_value' => 1
],/*
'temperature' => [
'instance_name' => 'temperature',
'description' => 'Температура',
'capabilitie' => 'range'
'capability' => 'range'
],*/
'temperature_k' => [
'instance_name' => 'temperature_k',
'description' => 'Цветовая температура',
'capabilitie' => 'color_setting',
'capability' => 'color_setting',
'default_value' => 4500,
'parameters' => [
'temperature_k' => [
@@ -114,36 +114,37 @@
'thermostat' => [
'instance_name' => 'thermostat',
'description' => 'Режим работы',
'capabilitie' => 'mode'
],
'capability' => 'mode'
],*/
'mute' => [
'instance_name' => 'mute',
'description' => 'Режим без звука',
'capabilitie' => 'toggle'
],
'capability' => 'toggle',
'default_value' => false
],/*
'fan_speed' => [
'instance_name' => 'fan_speed',
'description' => 'Скорость вентиляции',
'capabilitie' => 'mode'
'capability' => 'mode'
],
'hsv' => [
'instance_name' => 'hsv',
'description' => 'Цвет в формате HSV',
'capabilitie' => 'color_setting'
'capability' => 'color_setting'
],*/
'rgb' => [
'instance_name' => 'rgb',
'description' => 'Цвет в формате RGB',
'capabilitie' => 'color_setting',
'default_value' => 16777215,
'capability' => 'color_setting',
'default_value' => '000000',
'parameters' => [
'color_model' => 'rgb'
]
],
'brightness' => [
'instance_name' => 'brightness',
'description' => 'Яркость',
'capabilitie' => 'range',
'capability' => 'range',
'default_value' => 50,
'parameters' => [
'unit' => 'unit.percent',
@@ -3,7 +3,7 @@
* Главный класс модуля Yandex Home
* @author <skysilver.da@gmail.com>
* @copyright 2019 Agaphonov Dmitri aka skysilver <skysilver.da@gmail.com> (c)
* @version 0.2b 2019/06/11
* @version 0.4b 2019/06/20
*/
const PREFIX_CAPABILITIES = 'devices.capabilities.';
@@ -251,13 +251,15 @@ function search_yandexhome_devices(&$out)
$loc_title = $res[$i]['ROOM'];
}
$res[$i]['LAST_DEV'] = 0;
if (isset($res[$i]['NEW_ROOM']) || $i == $total-1) {
if (isset($res[$i]['NEW_ROOM'])) {
if ($i == $total-1) {
$res[$i-1]['LAST_DEV'] = 1;
$res[$i]['LAST_DEV'] = 1;
} else if ($i > 0) {
}
if ($i > 0) {
$res[$i-1]['LAST_DEV'] = 1;
}
} else if (!isset($res[$i]['NEW_ROOM']) && ($i == $total-1)) {
$res[$i]['LAST_DEV'] = 1;
}
$traits = json_decode($res[$i]['TRAITS'], true);
if (is_array($traits) && count($traits) > 0) {
@@ -400,7 +402,7 @@ function edit_yandexhome_devices(&$out, $id)
if (is_array($new_dev_traits)) {
foreach ($new_dev_traits as $trait) {
$parameters = [];
$trait_type = PREFIX_CAPABILITIES . $this->devices_instance[$trait['type']]['capabilitie'];
$trait_type = PREFIX_CAPABILITIES . $this->devices_instance[$trait['type']]['capability'];
if (isset($this->devices_instance[$trait['type']]['parameters'])) {
$parameters = $this->devices_instance[$trait['type']]['parameters'];
if ($trait['type'] != 'rgb' && $trait['type'] != 'temperature_k') {
@@ -416,7 +418,7 @@ function edit_yandexhome_devices(&$out, $id)
break;
}
}
if ($check) {
if ($check && $trait_type == PREFIX_CAPABILITIES.'color_setting') {
$traits[$check]['parameters'] = array_merge ($traits[$check]['parameters'], $parameters);
} else {
$traits[] = [
@@ -610,12 +612,18 @@ function HandleQueryRequest($content)
case 'temperature':
$state['value'] = (int)$value;
break;
case 'volume':
$state['value'] = (int)$value;
break;
case 'mute':
$state['value'] = $value ? true : false;
break;
default:
$state['value'] = $value;
break;
}
$capabilities[] = [
'type' => PREFIX_CAPABILITIES . $this->devices_instance[$trait['type']]['capabilitie'],
'type' => PREFIX_CAPABILITIES . $this->devices_instance[$trait['type']]['capability'],
'state' => $state
];
}
@@ -662,11 +670,11 @@ function HandleExecuteRequest($content)
$capabilities = [];
$state = [];
foreach ($device['capabilities'] as $capabilitie) {
foreach ($device['capabilities'] as $capability) {
$type = str_replace(PREFIX_CAPABILITIES, '', $capabilitie['type']);
$value = $capabilitie['state']['value'];
$instance = $capabilitie['state']['instance'];
$type = str_replace(PREFIX_CAPABILITIES, '', $capability['type']);
$value = $capability['state']['value'];
$instance = $capability['state']['instance'];
$this->WriteLog("Capabilities type '$type', instance '$instance', value=" . json_encode($value));
@@ -680,15 +688,19 @@ function HandleExecuteRequest($content)
if (is_array($traits) && isset($traits[$instance]) && $traits[$instance]['linked_object'] != '' && $traits[$instance]['linked_property'] != '') {
$linked_object = $traits[$instance]['linked_object'];
$linked_property = $traits[$instance]['linked_property'];
switch ($instance) {
case 'on':
switch (true) {
case ($instance == 'on' || $instance == 'mute') :
// Конвертируем true/false в 1/0.
$value = ($value === true) ? 1 : 0;
break;
case 'brightness':
// TODO
case ($instance == 'volume' || $instance == 'channel') :
if (isset($capability['state']['relative']) && $capability['state']['relative'] === true) {
$cur_val = getGlobal("$linked_object.$linked_property");
$value = $cur_val + $value;
if ($value < 0) $value = 0;
}
break;
case 'rgb':
case ($instance == 'rgb') :
$value = str_pad(dechex($value), 6, '0', STR_PAD_LEFT);
break;
}
@@ -9,7 +9,7 @@ <h4 class="modal-title">Yandex Home</h4>
<div class="modal-body" style="padding-bottom: 1px;">
<div class="float-right">
<img src="../img/modules/yandexhome.png" width="48" height="48">
<br><br><p><b>v.0.3b</b><br>12.06.19</p>
<br><br><p><b>v.0.4b</b><br>20.06.19</p>
</div>
<p class="float-left">
Модуль поддержки <b>личных</b> (приватных) навыков для платформы умного дома <b>Яндекс</b>.<br><br>
@@ -116,6 +116,7 @@

<div>
<pre id="objects_json" style="display:none;">[#OBJECTS#]</pre>
<!--# <pre>[#CONFIG#]</pre> #-->
</div>

<script type="text/javascript">
@@ -26,6 +26,7 @@ <h4>[#ROOM#]</h4>
<a href="?view_mode=delete_yandexhome_devices&id=[#ID#]" class="btn btn-default btn-round" title="Удалить" onClick="return confirm('<#LANG_ARE_YOU_SURE#>')" style="color: #a94442;"><span class="glyphicon glyphicon-trash"></span></a>
</div>
<h3 class="panel-title"><b>[#TITLE#]</b></h3>
<!--# <h3 class="panel-title"><b>[#TITLE#]</b> [#NEW_ROOM#]|[#LAST_DEV#]</h3> #-->
</div>
<!--# Содержимое панели #-->
<div class="panel-content">
@@ -160,9 +160,12 @@ <h4>Справка</h4>
</thead>
<tbody>
<tr><td><b>on</b></td><td>Включить/выключить (1 - включено, 0 выключено).</td><td>1 и 0</td><td>true и false</td></tr>
<tr><td><b>brightness</b></td><td>Яркость (проценты).</td><td>1 - 100</td><td>1 - 100</td></tr>
<tr><td><b>rgb</b></td><td>Цвет в формате RGB (hex).</td><td>000000 - FFFFFF</td><td>0 - 16777215</td></tr>
<tr><td><b>volume</b></td><td>Громкость (проценты).</td><td>1 - 100</td><td>1 - 100, либо +1/-1</td></tr>
<tr><td><b>channel</b></td><td>ТВ-канал.</td><td>№ канала</td><td>№ канала, либо +1/-1</td></tr>
<tr><td><b>temperature_k</b></td><td>Температура цвета (кельвины).</td><td>2700 - 9000</td><td>2700 - 9000</td></tr>
<tr><td><b>mute</b></td><td>Режим без звука (1 - включено, 0 выключено).</td><td>1 и 0</td><td>true и false</td></tr>
<tr><td><b>rgb</b></td><td>Цвет в формате RGB (hex).</td><td>000000 - FFFFFF</td><td>0 - 16777215</td></tr>
<tr><td><b>brightness</b></td><td>Яркость (проценты).</td><td>1 - 100</td><td>1 - 100</td></tr>
</tbody>
</table>
</div>

0 comments on commit e965fae

Please sign in to comment.
You can’t perform that action at this time.