[Модуль] Tuya

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 2:35 am

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
Как отладить данную ситуацию?
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение 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?
Мажордомо на чём стоит?
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 2:54 am

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 роутера, а не внутренний сетевого фильтра
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение 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. Устройство с облаком общается по этому протоколу
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 3:21 am

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, что-то значит не так.
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение 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}}"
За это сообщение автора Husky поблагодарил:
fandaymon (Пн мар 09, 2020 3:44 am)
Рейтинг: 1.16%
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение 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}}"
О как... У меня ни на одном устройстве лидирующий нолик не получался, поэтому на эти грабли я не наступал. Спасибо за инфу!!!
Исправил
За это сообщение автора fandaymon поблагодарил:
Husky (Пн мар 09, 2020 10:43 am)
Рейтинг: 1.16%
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 10:45 am

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?
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение 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] и управлять при помощи свойства
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 11:01 am

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 в такие объекты, чтобы через мускль не приходилось это делать для остальных.
Ну и само устройство тоже чтобы добавлялось автоматически.
Ответить