Страница 31 из 132
Re: [Модуль] Tuya
Добавлено: Ср май 06, 2020 9:33 pm
fandaymon
mihas писал(а): Ср май 06, 2020 9:06 pm
Ну в конкретном случае не к state а к 27, но я и там и там пробовал. Само св-во меняется при нажатии в mjdm, до обновления статусов, но на устройство это никак не влияет, т.е. такое впечатление, что односторонняя связь только.
Я бы всё-таки попробовал к state привязать. С этими цветными шутками ни в чём нельзя быть уверенным - возможно там ещё и яркость надо регулировать, чтобы подсветка загоралась и цвет выставить. С основным функционалом розетки проще всё
mihas писал(а): Ср май 06, 2020 9:06 pm
Ок. Сделано. Правда в облаке оно есть, через приложение то все работает. Его модуль только не видит.
Ну в HA облаке нету, раз модуль не видит
Re: [Модуль] Tuya
Добавлено: Ср май 06, 2020 11:54 pm
mihas
fandaymon писал(а): Ср май 06, 2020 9:33 pm
Я бы всё-таки попробовал к state привязать. С этими цветными шутками ни в чём нельзя быть уверенным - возможно там ещё и яркость надо регулировать, чтобы подсветка загоралась и цвет выставить. С основным функционалом розетки проще всё
Да. Это ничего не меняет
fandaymon писал(а): Ср май 06, 2020 9:33 pm
Ну в HA облаке нету, раз модуль не видит
Хм.. по запросу из модуля он действительно только одно устройство выдает.. странно, не знаешь почему оно в приложении есть, а в облаке его нет? Может его удалить и еще раз создать надо? Раньше он был точно.
А еще вот такие ошибки валятся
Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer in /var/www/html/modules/tuya/tuya.class.php on line 484
Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 480
Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 480
И в лог пишет что пытался к этому устройству подключиться.
Re: [Модуль] Tuya
Добавлено: Чт май 07, 2020 12:17 am
fandaymon
mihas писал(а): Ср май 06, 2020 11:54 pm
fandaymon писал(а): Ср май 06, 2020 9:33 pm
Я бы всё-таки попробовал к state привязать. С этими цветными шутками ни в чём нельзя быть уверенным - возможно там ещё и яркость надо регулировать, чтобы подсветка загоралась и цвет выставить. С основным функционалом розетки проще всё
Да. Это ничего не меняет
fandaymon писал(а): Ср май 06, 2020 9:33 pm
Ну в HA облаке нету, раз модуль не видит
Хм.. по запросу из модуля он действительно только одно устройство выдает.. странно, не знаешь почему оно в приложении есть, а в облаке его нет? Может его удалить и еще раз создать надо? Раньше он был точно.
А еще вот такие ошибки валятся
Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer in /var/www/html/modules/tuya/tuya.class.php on line 484
Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 480
Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 480
И в лог пишет что пытался к этому устройству подключиться.
Вот чего не знаю, того не знаю - это специальное облако для Home Assitanta и про него практически никакой информации нету - только непонятно откуда взявшиеся питоновские библиотеки... Удалить/создать - думаю не помешает
Скорее всего и управлять не получается из-за того что модуль достучаться не может... Можно попробовать поставить 30 секунд период опроса и перезапустить цикл.
Я очень хотел уйти от очереди команд, чтобы не было пауз перед включением/выключением, возможно это была плохая идея. Будет время - попробую переделать цикл для работы с очередью
Ну и в принципе - у устройств, где есть управление цветом, получаются очень длинные пакеты - возможно из-за этого всё как-то не так работает
Re: [Модуль] Tuya
Добавлено: Чт май 07, 2020 1:07 am
mihas
fandaymon писал(а): Чт май 07, 2020 12:17 am
Вот чего не знаю, того не знаю - это специальное облако для Home Assitanta и про него практически никакой информации нету - только непонятно откуда взявшиеся питоновские библиотеки... Удалить/создать - думаю не помешает
Скорее всего и управлять не получается из-за того что модуль достучаться не может... Можно попробовать поставить 30 секунд период опроса и перезапустить цикл.
Я очень хотел уйти от очереди команд, чтобы не было пауз перед включением/выключением, возможно это была плохая идея. Будет время - попробую переделать цикл для работы с очередью
Ну и в принципе - у устройств, где есть управление цветом, получаются очень длинные пакеты - возможно из-за этого всё как-то не так работает
Разобрался. Модуль локально ничего и не посылает. Проблема была в условии if метода propertySetHandle
Код: Выделить всё
...
if ($properties[0]['LOCAL_KEY']==NULL or $properties[0]['DEV_IP']==NULL or $properties[0]['REMOTE_CONTROL']==1) {
if ($dps_name=='state') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'turnOnOff');
} else if ($dps_name=='brightness') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'brightnessSet');
} else if ($dps_name=='color_temp') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'colorTemperatureSet');
} else if ($dps_name=='color_mode') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'colorModeSet');
}
else if ($dps_name=='temperature') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'temperatureSet');
}
} else {
...
Немного переписал, вкл/выкл заработал.
Поправь пожалуйста, если не сложно.
Код: Выделить всё
/**
* @param string $object
* @param string $property
* @param int $value
*/
function propertySetHandle($object, $property, $value)
{
$query = sprintf("
SELECT tucommands.*,
tudevices.DEV_ID,
tudevices.LOCAL_KEY,
tudevices.DEV_IP,
tudevices.TYPE
FROM tucommands
LEFT JOIN tudevices ON tudevices.ID=tucommands.DEVICE_ID
WHERE tucommands.LINKED_OBJECT LIKE '%s'
AND tucommands.LINKED_PROPERTY LIKE '%s'
", DBSafe($object), DBSafe($property));
$properties = SQLSelect($query);
$total = count($properties);
if ($total) {
$dpsName = $properties[0]['TITLE'];
if ($properties[0]['LOCAL_KEY']
&& $properties[0]['DEV_IP']
&& (int)$properties[0]['REMOTE_CONTROL'] !== 1) {
$mdev = strpos($properties[0]['DEV_ID'], '_');
if ($mdev > 0) {
$devId = substr($properties[0]['DEV_ID'], 0, $mdev);
if ($properties[0]['TITLE'] == 'state') {
$dpsName = substr($properties[0]['DEV_ID'], $mdev + 1);
}
} else {
if ($properties[0]['TITLE'] == 'state') {
$dpsName = '1';
}
$devId = $properties[0]['DEV_ID'];
}
if ($properties[0]['TYPE'] == 'cover') {
$dps = '{"' . $dpsName . '":' . $value . '}';
} else {
$dps = '{"' . $dpsName . '":' . (($value == 1) ? 'true' : 'false') . '}';
}
SQLExec("UPDATE tudevices SET BUSY=1 WHERE ID=" . $properties[0]['DEVICE_ID']);
$this->TuyaLocalMsg('SET', $devId, $properties[0]['LOCAL_KEY'], $properties[0]['DEV_IP'], $dps);
SQLExec("UPDATE tudevices SET BUSY=0 WHERE ID=" . $properties[0]['DEVICE_ID']);
} else {
switch ($dpsName) {
case 'state':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'turnOnOff');
break;
case 'brightness':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'brightnessSet');
break;
case 'color_temp':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'colorTemperatureSet');
break;
case 'color_mode':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'colorModeSet');
break;
case 'temperature':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'temperatureSet');
break;
}
}
$rec = SQLSelectOne("select * from tucommands where ID=" . $properties[0]['ID']);
$rec['value'] = $value;
SQLUpdate('tucommands', $rec);
}
}
А ошибки возникают, видимо когда скрипт начинает слишком часто опрашивать устройство, оно банит. Нужно наверное пореже опрос делать.
Re: [Модуль] Tuya
Добавлено: Чт май 07, 2020 1:53 am
fandaymon
mihas писал(а): Чт май 07, 2020 1:07 am
fandaymon писал(а): Чт май 07, 2020 12:17 am
Вот чего не знаю, того не знаю - это специальное облако для Home Assitanta и про него практически никакой информации нету - только непонятно откуда взявшиеся питоновские библиотеки... Удалить/создать - думаю не помешает
Скорее всего и управлять не получается из-за того что модуль достучаться не может... Можно попробовать поставить 30 секунд период опроса и перезапустить цикл.
Я очень хотел уйти от очереди команд, чтобы не было пауз перед включением/выключением, возможно это была плохая идея. Будет время - попробую переделать цикл для работы с очередью
Ну и в принципе - у устройств, где есть управление цветом, получаются очень длинные пакеты - возможно из-за этого всё как-то не так работает
Разобрался. Модуль локально ничего и не посылает. Проблема была в условии if метода propertySetHandle
Код: Выделить всё
...
if ($properties[0]['LOCAL_KEY']==NULL or $properties[0]['DEV_IP']==NULL or $properties[0]['REMOTE_CONTROL']==1) {
if ($dps_name=='state') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'turnOnOff');
} else if ($dps_name=='brightness') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'brightnessSet');
} else if ($dps_name=='color_temp') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'colorTemperatureSet');
} else if ($dps_name=='color_mode') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'colorModeSet');
}
else if ($dps_name=='temperature') {
$this->TuyaRemoteMsg($properties[0]['DEV_ID'],$value,'temperatureSet');
}
} else {
...
Немного переписал, вкл/выкл заработал.
Поправь пожалуйста, если не сложно.
Код: Выделить всё
/**
* @param string $object
* @param string $property
* @param int $value
*/
function propertySetHandle($object, $property, $value)
{
$query = sprintf("
SELECT tucommands.*,
tudevices.DEV_ID,
tudevices.LOCAL_KEY,
tudevices.DEV_IP,
tudevices.TYPE
FROM tucommands
LEFT JOIN tudevices ON tudevices.ID=tucommands.DEVICE_ID
WHERE tucommands.LINKED_OBJECT LIKE '%s'
AND tucommands.LINKED_PROPERTY LIKE '%s'
", DBSafe($object), DBSafe($property));
$properties = SQLSelect($query);
$total = count($properties);
if ($total) {
$dpsName = $properties[0]['TITLE'];
if ($properties[0]['LOCAL_KEY']
&& $properties[0]['DEV_IP']
&& (int)$properties[0]['REMOTE_CONTROL'] !== 1) {
$mdev = strpos($properties[0]['DEV_ID'], '_');
if ($mdev > 0) {
$devId = substr($properties[0]['DEV_ID'], 0, $mdev);
if ($properties[0]['TITLE'] == 'state') {
$dpsName = substr($properties[0]['DEV_ID'], $mdev + 1);
}
} else {
if ($properties[0]['TITLE'] == 'state') {
$dpsName = '1';
}
$devId = $properties[0]['DEV_ID'];
}
if ($properties[0]['TYPE'] == 'cover') {
$dps = '{"' . $dpsName . '":' . $value . '}';
} else {
$dps = '{"' . $dpsName . '":' . (($value == 1) ? 'true' : 'false') . '}';
}
SQLExec("UPDATE tudevices SET BUSY=1 WHERE ID=" . $properties[0]['DEVICE_ID']);
$this->TuyaLocalMsg('SET', $devId, $properties[0]['LOCAL_KEY'], $properties[0]['DEV_IP'], $dps);
SQLExec("UPDATE tudevices SET BUSY=0 WHERE ID=" . $properties[0]['DEVICE_ID']);
} else {
switch ($dpsName) {
case 'state':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'turnOnOff');
break;
case 'brightness':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'brightnessSet');
break;
case 'color_temp':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'colorTemperatureSet');
break;
case 'color_mode':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'colorModeSet');
break;
case 'temperature':
$this->TuyaRemoteMsg($properties[0]['DEV_ID'], $value, 'temperatureSet');
break;
}
}
$rec = SQLSelectOne("select * from tucommands where ID=" . $properties[0]['ID']);
$rec['value'] = $value;
SQLUpdate('tucommands', $rec);
}
}
А ошибки возникают, видимо когда скрипт начинает слишком часто опрашивать устройство, оно банит. Нужно наверное пореже опрос делать.
Похоже проблемы была в том, что именно находится в пустом поле IP и LocalKey... В моей версии mariadb, почему-то были NULL, хотя по логике там должна была быть пустая строка. На всякий случай поменял сравнение с NULL на strlen. Вроде бы теперь должно работать у всех
Cпасибо за обнаружение ошибки!
Re: [Модуль] Tuya
Добавлено: Чт май 07, 2020 11:43 am
mihas
fandaymon писал(а): Чт май 07, 2020 1:53 am
Похоже проблемы была в том, что именно находится в пустом поле IP и LocalKey... В моей версии mariadb, почему-то были NULL, хотя по логике там должна была быть пустая строка. На всякий случай поменял сравнение с NULL на strlen. Вроде бы теперь должно работать у всех
Cпасибо за обнаружение ошибки!
Ага, там в таблице, если нет значения то по-дефолту пустая строка (not null):
create or replace table if not exists tudevices
(
ID int unsigned auto_increment
primary key,
TITLE varchar(100) default '' not null,
TYPE varchar(100) default '' not null,
DEV_ICON varchar(100) default '' not null,
DEV_ID varchar(255) default '' not null,
LOCAL_KEY varchar(255) default '' not null,
DEV_IP varchar(255) default '' not null,
BUSY tinyint(1) default 0 not null,
UPDATED datetime null
);
Я бы еще обернул бы переменную в trim() для надежности
Спасибо.
Re: [Модуль] Tuya
Добавлено: Пт май 29, 2020 9:04 am
Niklays
Подскажите добавил умный выключатель , код такой как и на sonoff написал
turnOn- $this->setProperty("status",1)
turnOff- $this->setProperty("status",0)
и switch
$status=$this->getProperty("status");
if ($status) {
$this->callMetod('turnOff');
} else {
$this->callMetod('turnOn');
}
Re: [Модуль] Tuya
Добавлено: Пт май 29, 2020 12:48 pm
fandaymon
Niklays писал(а): Пт май 29, 2020 9:04 am
Подскажите добавил умный выключатель , код такой как и на sonoff написал
turnOn- $this->setProperty("status",1)
turnOff- $this->setProperty("status",0)
и switch
$status=$this->getProperty("status");
if ($status) {
$this->callMetod('turnOff');
} else {
$this->callMetod('turnOn');
}
Что подсказать-то?
Re: [Модуль] Tuya
Добавлено: Пт май 29, 2020 1:54 pm
Niklays
не работает выключатель , в итоге отвалился пришлось по новому подвязывать к программе
Re: [Модуль] Tuya
Добавлено: Пт май 29, 2020 4:11 pm
Niklays
Ввел свой имейл , пароль, код страны 3(это Украина),выбрал тип программы Tyua и интервал обновлений 100.
Вытянул ключ с tuya версия 3.5.1 установил с 4pda packet capture версии 1.7, обязательное условие чтобы сертификат поставило перед соединением и ловите пакеты , потом запускаете tyua. И ждем мин 5 клацая ваше реле. Отключаем захват пакетов и ищем local key.
Потом заполнил все данные в majordomo и удалил tyua так как за 24 часа заманался лазить под потолок так как теряло приложение мой гаджет.