Страница 50 из 132
Re: [Модуль] Tuya
Добавлено: Чт ноя 19, 2020 5:47 pm
Daniral
fandaymon писал(а): Чт ноя 19, 2020 4:22 pm
Daniral писал(а): Чт ноя 19, 2020 3:17 pm
fandaymon писал(а): Чт ноя 19, 2020 2:29 pm
Daniral писал(а): Чт ноя 19, 2020 10:45 am
Добрый день.
Подскажите пожалуйста что я не так делаю.
Подключил к приложению Tuya две wi-fi розетки.
В модуле ввел логин и пароль.
Розетки нашлись и нормально работают с мд.
Но как только я ввожу айпи все сразу перестает работать.
Сотру айпи опять работает.
Ключи тоже ввожу.
Очень хотелось бы чтобы работало все локально.
А так без интернета не работает.
Надо включить debug цикла и посмотреть в логе что не так.
Судя по интернетам, где-то с середины лета у людей некоторые розетки перестали отдавать статус при локальном запросе статуса. Всякими костылями это можно побороть, но мне на чем экспериментировать - все мои розетки, лампы, удлинители работают. Если есть желание наладить работу своих розеток, то можно попробовать поработать так - я присылаю сценарий, вы его запускаете и присылаете мне результат, я делаю изменения в сценарии, отсылаю его обратно и т.д. Долго, муторно, но пока какого-то другого способа я не вижу...
Если включить из приложения а потом заслать в мд цифру
(посылал 0,1,2,3) то розетка выключается. А на включение не работает
Дебаг у меня включен. Только я не знаю где смотреть что он пишет
Смотреть вывод дебага в X-Ray
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
Re: [Модуль] Tuya
Добавлено: Чт ноя 19, 2020 8:16 pm
fandaymon
Daniral писал(а): Чт ноя 19, 2020 5:47 pm
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
О! Вот это тот самый случай! РОзетка вместо статуса отдаёт ошибку json. В цикле после этого запрашивается альтернативный статус, как это сделано в модуле для HA, но альтернативный запрос ничего не возвращает - надо эксперементировать...
Re: [Модуль] Tuya
Добавлено: Чт ноя 19, 2020 10:05 pm
Daniral
fandaymon писал(а): Чт ноя 19, 2020 8:16 pm
Daniral писал(а): Чт ноя 19, 2020 5:47 pm
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
О! Вот это тот самый случай! РОзетка вместо статуса отдаёт ошибку json. В цикле после этого запрашивается альтернативный статус, как это сделано в модуле для HA, но альтернативный запрос ничего не возвращает - надо эксперементировать...
Я не против. Чё делать? Только в логе последнее обновление в 14 было. Я тут отправлял из мд. Из приложения. Новых логов нету. Так и должно быть?
Я перехватывал пакеты которые приложение шлёт на розетку. Если надо могу тебе их перекинуть
Re: [Модуль] Tuya
Добавлено: Пт ноя 20, 2020 10:48 pm
fandaymon
Daniral писал(а): Чт ноя 19, 2020 10:05 pm
fandaymon писал(а): Чт ноя 19, 2020 8:16 pm
Daniral писал(а): Чт ноя 19, 2020 5:47 pm
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
О! Вот это тот самый случай! РОзетка вместо статуса отдаёт ошибку json. В цикле после этого запрашивается альтернативный статус, как это сделано в модуле для HA, но альтернативный запрос ничего не возвращает - надо эксперементировать...
Я не против. Чё делать? Только в логе последнее обновление в 14 было. Я тут отправлял из мд. Из приложения. Новых логов нету. Так и должно быть?
Я перехватывал пакеты которые приложение шлёт на розетку. Если надо могу тебе их перекинуть
Такое ощущение, что стоит опрос каждую секунду? Если это так, то лучше секунд 5 поставить
У меня, наверное, в воскресенье будет время заняться модулем, постараюсь ещё раз прошерстить написанное на nodejs и питоне для туи и собрать скрипт со всякими вариантами запросов - нужно будет запустить этот скрипт и прислать мне ответ
Ну и с пультами надо бы доразобраться...
Re: [Модуль] Tuya
Добавлено: Сб ноя 21, 2020 9:52 pm
Daniral
fandaymon писал(а): Пт ноя 20, 2020 10:48 pm
Daniral писал(а): Чт ноя 19, 2020 10:05 pm
fandaymon писал(а): Чт ноя 19, 2020 8:16 pm
Daniral писал(а): Чт ноя 19, 2020 5:47 pm
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
О! Вот это тот самый случай! РОзетка вместо статуса отдаёт ошибку json. В цикле после этого запрашивается альтернативный статус, как это сделано в модуле для HA, но альтернативный запрос ничего не возвращает - надо эксперементировать...
Я не против. Чё делать? Только в логе последнее обновление в 14 было. Я тут отправлял из мд. Из приложения. Новых логов нету. Так и должно быть?
Я перехватывал пакеты которые приложение шлёт на розетку. Если надо могу тебе их перекинуть
Такое ощущение, что стоит опрос каждую секунду? Если это так, то лучше секунд 5 поставить
У меня, наверное, в воскресенье будет время заняться модулем, постараюсь ещё раз прошерстить написанное на nodejs и питоне для туи и собрать скрипт со всякими вариантами запросов - нужно будет запустить этот скрипт и прислать мне ответ
Ну и с пультами надо бы доразобраться...
Оки
Re: [Модуль] Tuya
Добавлено: Пн ноя 23, 2020 3:53 pm
fandaymon
Daniral писал(а): Чт ноя 19, 2020 10:05 pm
fandaymon писал(а): Чт ноя 19, 2020 8:16 pm
Daniral писал(а): Чт ноя 19, 2020 5:47 pm
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
О! Вот это тот самый случай! РОзетка вместо статуса отдаёт ошибку json. В цикле после этого запрашивается альтернативный статус, как это сделано в модуле для HA, но альтернативный запрос ничего не возвращает - надо эксперементировать...
Я не против. Чё делать? Только в логе последнее обновление в 14 было. Я тут отправлял из мд. Из приложения. Новых логов нету. Так и должно быть?
Я перехватывал пакеты которые приложение шлёт на розетку. Если надо могу тебе их перекинуть
Вот такой вот сценарий можно попробовать запустить
Код: Выделить всё
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$device = SQLSelectOne("SELECT ID, TITLE, LOCAL_KEY, DEV_ID, DEV_IP FROM tudevices WHERE TITLE='MazganSpalnya'");
$local_key = $device['LOCAL_KEY'];
$dev_id = $device['DEV_ID'];
$local_ip = $device['DEV_IP'];
echo 'Len of Dev_ID=' . strlen($dev_id) . '<BR>';
$hexByte="0a";
$json='{"gwId":"'.$dev_id.'","devId":"'.$dev_id.'"}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
$buf='';
socket_connect($socket, $local_ip, 6668);
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status=' .$result .'<BR>';
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status1=' .$result .'<BR>';
$hexByte="0d";
$dps= '{"1": null, "2": null}';
$json='{"gwId":"'.$dev_id.'","devId":"'.$dev_id.'", "t": "'.time().'", "dps": ' . $dps . '}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$buf='';
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Tuya: alt. status=' . $result . '<BR>';
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo 'Alt Status 1=' .$result .'<BR>';
socket_close($socket);
Re: [Модуль] Tuya
Добавлено: Пн ноя 23, 2020 11:43 pm
Pamfletik
Попробовал сценарий со своей розеткой. Которая локально не отдает данные. Заменил TITLE='MazganSpalnya' на своё название. Получил:
Len of Dev_ID=22
Status=
Status1=
Tuya: alt. status=
Alt Status 1=
Попробовал с другмми устройствами которые работают локально, с одним (диммер) получил
Len of Dev_ID=20
Status={"devId":"03****************c","dps":{"1":false,"3":255,"101":25}}
с остальными (2 кн. выключатели) тоже Len of Dev_ID=22 и пусто
Re: [Модуль] Tuya
Добавлено: Вт ноя 24, 2020 12:34 am
fandaymon
Pamfletik писал(а): Пн ноя 23, 2020 11:43 pm
Попробовал сценарий со своей розеткой. Которая локально не отдает данные. Заменил TITLE='MazganSpalnya' на своё название. Получил:
Len of Dev_ID=22
Status=
Status1=
Tuya: alt. status=
Alt Status 1=
Попробовал с другмми устройствами которые работают локально, с одним (диммер) получил
Len of Dev_ID=20
Status={"devId":"03****************c","dps":{"1":false,"3":255,"101":25}}
с остальными (2 кн. выключатели) тоже Len of Dev_ID=22 и пусто
О! А тут розетка с длиной ID=22! Такой случай тоже встречался как исключение... По идее с ней должна работать ветка с альтернативным статусом. В $dps должны быть перечислены все ключи, сколько их есть у розетки... Попробовать заменить код, начинающийся с $hexByte="0d" на такой
Код: Выделить всё
$hexByte="0d";
$sql = "SELECT TITLE from tucommands WHERE DEVICE_ID='" . $device['ID']. "' AND TITLE!='online'";
$command = SQLSelect($sql);
$dps='';
foreach ($command as $d) {
$dps.= ','.'"'.$d['TITLE'] .'":null';
}
$json='{"devId":"'.$dev_id.'","uid":"","t":"'.time().'","dps": ' . $dps . '}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$buf='';
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result );
echo bin2hex($buf ).'<BR>';
echo ' Tuya: alt. status=' . $result;
socket_close($socket);
Да и ещё - перед тем как запускать скрипт, локальный цикл туи надо остановить - в XRAY - Services
Re: [Модуль] Tuya
Добавлено: Вт ноя 24, 2020 11:18 am
Daniral
fandaymon писал(а): Пн ноя 23, 2020 3:53 pm
Daniral писал(а): Чт ноя 19, 2020 10:05 pm
fandaymon писал(а): Чт ноя 19, 2020 8:16 pm
Daniral писал(а): Чт ноя 19, 2020 5:47 pm
14:37:15 0.91600600 14:37:15 Tuya: Status=json obj data unvalid
14:37:15 0.89146300 14:37:15 Tuya: Get Local Status MazganSpalnya
14:37:14 0.87996400 14:37:14 Tuya: alt. status=
14:37:14 0.83484000 14:37:14 Tuya: get alt. status
14:37:14 0.83449700 14:37:14 Tuya: Status=json obj data unvalid
14:37:14 0.82628200 14:37:14 Tuya: Get Local Status MazganSpalnya
14:37:13 0.81829500 14:37:13 Tuya: alt. status=
14:37:13 0.78657800 14:37:13 Tuya: get alt. status
14:37:13 0.78621300 14:37:13 Tuya: Status=json obj data unvalid
14:37:13 0.77644200 14:37:13 Tuya: Get Local Status MazganSpalnya
О! Вот это тот самый случай! РОзетка вместо статуса отдаёт ошибку json. В цикле после этого запрашивается альтернативный статус, как это сделано в модуле для HA, но альтернативный запрос ничего не возвращает - надо эксперементировать...
Я не против. Чё делать? Только в логе последнее обновление в 14 было. Я тут отправлял из мд. Из приложения. Новых логов нету. Так и должно быть?
Я перехватывал пакеты которые приложение шлёт на розетку. Если надо могу тебе их перекинуть
Вот такой вот сценарий можно попробовать запустить
Код: Выделить всё
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$device = SQLSelectOne("SELECT ID, TITLE, LOCAL_KEY, DEV_ID, DEV_IP FROM tudevices WHERE TITLE='MazganSpalnya'");
$local_key = $device['LOCAL_KEY'];
$dev_id = $device['DEV_ID'];
$local_ip = $device['DEV_IP'];
echo 'Len of Dev_ID=' . strlen($dev_id) . '<BR>';
$hexByte="0a";
$json='{"gwId":"'.$dev_id.'","devId":"'.$dev_id.'"}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
$buf='';
socket_connect($socket, $local_ip, 6668);
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status=' .$result .'<BR>';
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status1=' .$result .'<BR>';
$hexByte="0d";
$dps= '{"1": null, "2": null}';
$json='{"gwId":"'.$dev_id.'","devId":"'.$dev_id.'", "t": "'.time().'", "dps": ' . $dps . '}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$buf='';
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Tuya: alt. status=' . $result . '<BR>';
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo 'Alt Status 1=' .$result .'<BR>';
socket_close($socket);
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
Tuya: alt. status=
Alt Status 1=
До замены
Re: [Модуль] Tuya
Добавлено: Вт ноя 24, 2020 11:45 am
Daniral
fandaymon писал(а): Вт ноя 24, 2020 12:34 am
Pamfletik писал(а): Пн ноя 23, 2020 11:43 pm
Попробовал сценарий со своей розеткой. Которая локально не отдает данные. Заменил TITLE='MazganSpalnya' на своё название. Получил:
Len of Dev_ID=22
Status=
Status1=
Tuya: alt. status=
Alt Status 1=
Попробовал с другмми устройствами которые работают локально, с одним (диммер) получил
Len of Dev_ID=20
Status={"devId":"03****************c","dps":{"1":false,"3":255,"101":25}}
с остальными (2 кн. выключатели) тоже Len of Dev_ID=22 и пусто
О! А тут розетка с длиной ID=22! Такой случай тоже встречался как исключение... По идее с ней должна работать ветка с альтернативным статусом. В $dps должны быть перечислены все ключи, сколько их есть у розетки... Попробовать заменить код, начинающийся с $hexByte="0d" на такой
Код: Выделить всё
$hexByte="0d";
$sql = "SELECT TITLE from tucommands WHERE DEVICE_ID='" . $device['ID']. "' AND TITLE!='online'";
$command = SQLSelect($sql);
$dps='';
foreach ($command as $d) {
$dps.= ','.'"'.$d['TITLE'] .'":null';
}
$json='{"devId":"'.$dev_id.'","uid":"","t":"'.time().'","dps": ' . $dps . '}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$buf='';
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result );
echo bin2hex($buf ).'<BR>';
echo ' Tuya: alt. status=' . $result;
socket_close($socket);
Да и ещё - перед тем как запускать скрипт, локальный цикл туи надо остановить - в XRAY - Services
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c0000000149d2434632d59f1f543e300daa9c35ba6c8829bc94ee32ef311b29e13609cb88f608e4c50000aa55
Tuya: alt. status=data format error
После замены