Страница 26 из 132

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 2:35 am
Husky
fandaymon писал(а): Пн мар 09, 2020 2:32 am
Husky писал(а): Пн мар 09, 2020 2:16 am
fandaymon писал(а): Пн мар 09, 2020 1:02 am
Husky писал(а): Пн мар 09, 2020 12:40 am
Не появилось, и никаких новых свойств кроме online и state не появилось ни в первом ни в других переключателях. Неверный локальный ключ?
Проверить легко - надо сделать новый сценарий, скопировать туда такой код

Код: Выделить всё

include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$local_key='';
$local_ip='';
$dev_id='';
$gw_id=$dev_id;

   $prefix="000055aa00000000000000";
   $suffix="000000000000aa55";

    $hexByte="0a";
    $json='{"gwId":"'.$gw_id.'","devId":"'.$dev_id.'"}';
  
    $json_payload=openssl_encrypt($json, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);


   $postfix_payload = hex2bin(bin2hex($json_payload) . $suffix);
   $postfix_payload_hex_len = dechex(strlen($postfix_payload));

   $buffer = hex2bin($prefix . $hexByte . '000000' . $postfix_payload_hex_len ) . $postfix_payload;
   $buffer=bin2hex($buffer);
   $buffer1=strtoupper(substr($buffer,0,-16));

   $hex_crc = dechex(crc32(hex2bin($buffer1))) ;
   $buffer=substr($buffer,0,-16) .($hex_crc).substr($buffer,-8);
   $data=$tuya_module->Tuya_send_receive(hex2bin($buffer),$local_ip);
   $result = substr($data,20,-8);
   $result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
 
var_dump($result);
В $local_key, $local_ip и $dev_id записать свои и запустить
$dev_id это общая часть для всех розеток, т.е до знака подчеркивания
Вот такое выдает:

Код: Выделить всё

Warning: hex2bin(): Hexadecimal input string must have an even length in /var/www/html/modules/scripts/scripts.class.php(151) : eval()'d code on line 26
NULL bool(false) 
NULL Это var_dump($data);
Устройство на наш запрос ничего не отвечает. Скорее всего ключ не правильный...
Перепроверил еще раз ключ, все верно, я его копирую в точности как в отловленном пакете, 16 символов

Иногда пишет:

Код: Выделить всё

Warning: hex2bin(): Hexadecimal input string must have an even length in /var/www/html/modules/scripts/scripts.class.php(151) : eval()'d code on line 26

Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer in /var/www/html/modules/tuya/tuya.class.php on line 466

Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 462

Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 462
Как отладить данную ситуацию?

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 2:45 am
fandaymon
Husky писал(а): Пн мар 09, 2020 2:35 am
Перепроверил еще раз ключ, все верно, я его копирую в точности как в отловленном пакете, 16 символов

Иногда пишет:

Код: Выделить всё

Warning: hex2bin(): Hexadecimal input string must have an even length in /var/www/html/modules/scripts/scripts.class.php(151) : eval()'d code on line 26

Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer in /var/www/html/modules/tuya/tuya.class.php on line 466

Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 462

Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 462
Пакет с локальным ключом был отловлен только что? Ключ меняется, если меняется ip устройства
Локальное ip правильное?
Когда пытаетесь управлять устройством со смартфона есть ли пакеты, которые идут на этот ip TCP 6668?
Мажордомо на чём стоит?

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 2:54 am
Husky
fandaymon писал(а): Пн мар 09, 2020 2:45 am
Husky писал(а): Пн мар 09, 2020 2:35 am
Перепроверил еще раз ключ, все верно, я его копирую в точности как в отловленном пакете, 16 символов

Иногда пишет:

Код: Выделить всё

Warning: hex2bin(): Hexadecimal input string must have an even length in /var/www/html/modules/scripts/scripts.class.php(151) : eval()'d code on line 26

Warning: socket_recv(): unable to read from socket [104]: Connection reset by peer in /var/www/html/modules/tuya/tuya.class.php on line 466

Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 462

Warning: socket_send(): unable to write to socket [32]: Broken pipe in /var/www/html/modules/tuya/tuya.class.php on line 462
Пакет с локальным ключом был отловлен только что? Ключ меняется, если меняется ip устройства
Локальное ip правильное?
Когда пытаетесь управлять устройством со смартфона есть ли пакеты, которые идут на этот ip TCP 6668?
Мажордомо на чём стоит?

Да, ключ отловил еще раз только что, он не поменялся. Локальный IP правильный, пингуется. В DHCP прописал IP, чтобы не менялся.
По пакетам - от приложения идут только POST на облако, TCP на непонятный внешний IP порт 8883 и UDP на непонятный внешний IP, порт 443

Проверил длину $buffer, он и правда 175 символов, а должен по идее быть четное количество символов для того, чтобы корректно конвертнуться из hex - это не ошибка?

И еще, в приложении в свойствах устройства, там, где пишется виртуальный ID(dev_Id), MAC, IP - указан мой внешний IP роутера, а не внутренний сетевого фильтра

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 3:12 am
fandaymon
Husky писал(а): Пн мар 09, 2020 2:54 am
Проверил длину $buffer, он и правда 175 символов, а должен по идее быть четное количество символов для того, чтобы корректно конвертнуться из hex - это не ошибка?
Должен быть 176. Ключ 16, dev id - 20
Husky писал(а): Пн мар 09, 2020 2:54 am И еще, в приложении в свойствах устройства, там, где пишется виртуальный ID(dev_Id), MAC, IP - указан мой внешний IP роутера, а не внутренний сетевого фильтра
В приложении и выдаётся внешний, поэтому local IP надо другим образом узнавать

8883 это MQTT. Устройство с облаком общается по этому протоколу

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 3:21 am
Husky
fandaymon писал(а): Пн мар 09, 2020 3:12 am
Husky писал(а): Пн мар 09, 2020 2:54 am
Проверил длину $buffer, он и правда 175 символов, а должен по идее быть четное количество символов для того, чтобы корректно конвертнуться из hex - это не ошибка?
Должен быть 176. Ключ 16, dev id - 20
Husky писал(а): Пн мар 09, 2020 2:54 am И еще, в приложении в свойствах устройства, там, где пишется виртуальный ID(dev_Id), MAC, IP - указан мой внешний IP роутера, а не внутренний сетевого фильтра
В приложении и выдаётся внешний, поэтому local IP надо другим образом узнавать

8883 это MQTT. Устройство с облаком общается по этому протоколу
Проверил, ключ 16, dev id 20, а $buffer - 175, что-то значит не так.

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 3:28 am
Husky
Кажется начинаю разбираться:
$hex_crc оказывается 7 символов, а не 8. Когда я добавил лидирующий 0 к нему, то вышеуказанный сценарий вернул:

string(123) "{"devId":"33808108bcddc2a8df32","dps":{"1":false,"2":false,"3":false,"4":false,"7":true,"9":0,"10":0,"11":0,"12":0,"15":0}}"

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 3:44 am
fandaymon
Husky писал(а): Пн мар 09, 2020 3:28 am Кажется начинаю разбираться:
$hex_crc оказывается 7 символов, а не 8. Когда я добавил лидирующий 0 к нему, то вышеуказанный сценарий вернул:

string(123) "{"devId":"33808108bcddc2a8df32","dps":{"1":false,"2":false,"3":false,"4":false,"7":true,"9":0,"10":0,"11":0,"12":0,"15":0}}"
О как... У меня ни на одном устройстве лидирующий нолик не получался, поэтому на эти грабли я не наступал. Спасибо за инфу!!!
Исправил

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 10:45 am
Husky
fandaymon писал(а): Пн мар 09, 2020 3:44 am
Husky писал(а): Пн мар 09, 2020 3:28 am Кажется начинаю разбираться:
$hex_crc оказывается 7 символов, а не 8. Когда я добавил лидирующий 0 к нему, то вышеуказанный сценарий вернул:

string(123) "{"devId":"33808108bcddc2a8df32","dps":{"1":false,"2":false,"3":false,"4":false,"7":true,"9":0,"10":0,"11":0,"12":0,"15":0}}"
О как... У меня ни на одном устройстве лидирующий нолик не получался, поэтому на эти грабли я не наступал. Спасибо за инфу!!!
Исправил
Огромное спасибо!
Теперь появились метрики:

Код: Выделить всё

{"1":false,"2":false,"3":false,"4":false,"7":true,"9":0,"10":0,"11":0,"12":0,"15":0}
Видим, что 7 там есть и показывает правильный статус. А как заставить управлять этим блоком 7? В Устройстве с dev_id_7 ничего не появилось. Вручную туда добавить state?

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 10:53 am
fandaymon
Husky писал(а): Пн мар 09, 2020 10:45 am
Огромное спасибо!
Теперь появились метрики:

Код: Выделить всё

{"1":false,"2":false,"3":false,"4":false,"7":true,"9":0,"10":0,"11":0,"12":0,"15":0}
Отлично! Спасибо на самом деле вам, как нашедшему источник проблемы
Husky писал(а): Пн мар 09, 2020 10:45 am Видим, что 7 там есть и показывает правильный статус. А как заставить управлять этим блоком 7? В Устройстве с dev_id_7 ничего не появилось. Вручную туда добавить state?
Привязать свойство к этой метрике [7] и управлять при помощи свойства

Re: [Модуль] Tuya

Добавлено: Пн мар 09, 2020 11:01 am
Husky
fandaymon писал(а): Пн мар 09, 2020 10:53 am
Husky писал(а): Пн мар 09, 2020 10:45 am
Огромное спасибо!
Теперь появились метрики:

Код: Выделить всё

{"1":false,"2":false,"3":false,"4":false,"7":true,"9":0,"10":0,"11":0,"12":0,"15":0}
Отлично! Спасибо на самом деле вам, как нашедшему источник проблемы
Husky писал(а): Пн мар 09, 2020 10:45 am Видим, что 7 там есть и показывает правильный статус. А как заставить управлять этим блоком 7? В Устройстве с dev_id_7 ничего не появилось. Вручную туда добавить state?
Привязать свойство к этой метрике [7] и управлять при помощи свойства

Проблема в том, что в устройстве USB (devId_7) нет никаких метрик кроме report = NULL.
Я через phpmyadmin скопировал в таблице tucommands state и online, поменял на ID устройства USB и только после этого метрики появились. Привязал к ним потом объект и вуаля - все заработало.

Думаю нужно как-то добавить в модуль автоматическое добавление метрик online и state в такие объекты, чтобы через мускль не приходилось это делать для остальных.
Ну и само устройство тоже чтобы добавлялось автоматически.