[Модуль] Tuya
Модератор: immortal
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Модуль] Tuya
А посмотреть какой dps получается?
echo $dps;
Правильный должен быть со всеми ключами, например если их 4 - 1,2,9,10, то в $dsp='{"1":null,"2":null,"9":null,"10":null}'
Последний раз редактировалось fandaymon Вт ноя 24, 2020 4:10 pm, всего редактировалось 1 раз.
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Модуль] Tuya
Ну т.е. понятно что статус не отдают устройства с id длиной 22 символа. ОК - будем пытаться их вылечить
-
- Сообщения: 82
- Зарегистрирован: Чт мар 05, 2020 5:11 pm
- Благодарил (а): 18 раз
- Поблагодарили: 1 раз
Re: [Модуль] Tuya
А куда вставить?
-
- Сообщения: 82
- Зарегистрирован: Чт мар 05, 2020 5:11 pm
- Благодарил (а): 18 раз
- Поблагодарили: 1 раз
Re: [Модуль] Tuya
Вставил в конце перед закрытием сокета
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
,"state":null
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Модуль] Tuya
Надо сначала к оригинальному облаку подключится, чтобы получить правильные ключи для устройстваDaniral писал(а): ↑Вт ноя 24, 2020 5:01 pm
Вставил в конце перед закрытием сокета
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
,"state":null
И там где цикл, должно быть так (последнюю строчку не скопировал...)
Код: Выделить всё
foreach ($command as $d) {
$dps.= ','.'"'.$d['TITLE'] .'":null';
}
$dps = '{'.substr($dps,2).'}';
echo $dps;
-
- Сообщения: 82
- Зарегистрирован: Чт мар 05, 2020 5:11 pm
- Благодарил (а): 18 раз
- Поблагодарили: 1 раз
Re: [Модуль] Tuya
fandaymon писал(а): ↑Вт ноя 24, 2020 5:10 pmНадо сначала к оригинальному облаку подключится, чтобы получить правильные ключи для устройстваDaniral писал(а): ↑Вт ноя 24, 2020 5:01 pm
Вставил в конце перед закрытием сокета
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
,"state":null
И там где цикл, должно быть так (последнюю строчку не скопировал...)
Код: Выделить всё
foreach ($command as $d) { $dps.= ','.'"'.$d['TITLE'] .'":null'; } $dps = '{'.substr($dps,2).'}'; echo $dps;
Код: Выделить всё
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='MazganDetskaya'");
$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";
$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';
}
$dps = '{'.substr($dps,2).'}';
echo $dps;
$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.'<BR>';
socket_close($socket);
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
{state":null}
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Модуль] Tuya
Я же говорю - надо сначала подключится к оригинальному облаку, чтобы получить все вот эти "1", "2" и т.д. в таблицу метрик устройства. Я так понимаю сейчас у этого устройства только 2 метрики - online и stateDaniral писал(а): ↑Вт ноя 24, 2020 7:33 pm
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='MazganDetskaya'");
$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";
$sql = "SELECT TITLE from tucommands WHERE DEVICE_ID='" . $device['ID']. "' AND TITLE!='online' AND TITLE!='state'";
$command = SQLSelect($sql);
$dps='';
foreach ($command as $d) {
$dps.= ','.'"'.$d['TITLE'] .'":null';
}
$dps = '{'.substr($dps,2).'}';
echo $dps;
$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.'<BR>';
socket_close($socket);
[/code]
Сделал так. Результат тот же.
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
{state":null}
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
Добавил в sql строку ещё условие не брать state
-
- Сообщения: 1554
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Модуль] Tuya
К оригинальному стоит? После подключения в поле Web Tuya SID должна появится длинная строка eu12533465274.... Это означает, что модуль подключился. После подключения скачивается информация обо всех устройствах, которые есть в облаке и о метриках, которые есть у этих устройств