[Модуль] Tuya

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

Модератор: immortal

grifindorec
Сообщения: 64
Зарегистрирован: Вт фев 02, 2021 12:54 pm
Благодарил (а): 15 раз
Поблагодарили: 5 раз

Re: [Модуль] Tuya

Сообщение grifindorec » Вт май 16, 2023 10:32 pm

odinvolk писал(а):
Вт май 16, 2023 6:15 pm
Вышел из положения таким образом

сделал свойство initiative_message
сделал метод initiative_message_decode

и привязал метод к свойству

Код метода initiative_message_decode
СпойлерПоказать

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

$ot = $this->object_title; // название объекта 
$message = $this->getProperty('initiative_message'); // берём из свойства объекта, который привязан к модулю tuya
$dop = '"]]}'; // дописываем недостающие символы иначе json получается битый

sg($ot.'.initiative_message_d',base64_decode($message).$dop);  // вставляем в свойство декодированное сообщение

//  дальше если нужно. декодируем и разбираем сообщение по параметрам и вставляем в свойства
$base = base64_decode($message).$dop;  // декодируем из base64 и добавляем недостающие символы

// должны получить такую строку
//{"v":"4.0","bucket":"ty-eu-storage30","cmd":"ipc_motion","type":"image","with":"resource","alarm":true,"time":1682386398,"files":[["/052910-12289210-szjs5ad413616ba205b3/unify/1682386398.jpeg"]]} должны получить такую строку

//----------------------- Вытягиваем данные
$json = json_decode($base, true);
$ver = $json['v'];
$bucket = $json['bucket'];
$cmd = $json['cmd'];
$type = $json['type'];
$with = $json['with'];
$alarm = $json['alarm'];
$time = $json['time'];
$files = $json['files'][0]['0'];
//----------------------- Записываем данные в свойства объекта
sg($ot.'.v',$ver);
sg($ot.'.bucket',$bucket);
sg($ot.'.cmd',$cmd);
sg($ot.'.type',$type);
sg($ot.'.alarm',intval($alarm));
sg($ot.'.time',date('H:i:s d-m-Y', $time));
sg($ot.'.file',$files);
// ----------------------------------запускаем аларм метод
if ($alarm) {
    $this->callMethod('motionDetected');
}
а вот как фотки получить пока не знаю
Супер, спасибо. Не догадался бы, что оно закодировано.
По поводу фоток, не думали реализовать через webrtc?
https://developer.tuya.com/en/docs/iot/ ... sd4x2hl0se
odinvolk
Сообщения: 49
Зарегистрирован: Ср май 31, 2017 3:06 am
Откуда: odinwolk@gmail.com
Благодарил (а): 179 раз
Поблагодарили: 17 раз

Re: [Модуль] Tuya

Сообщение odinvolk » Вт май 16, 2023 11:46 pm

В webrtc пока не разбирался
Есть мысли как реализовать? Буду благодарен
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь или нажмите кнопку "Спасибо"!!!
fandaymon
Сообщения: 1528
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 564 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Сб май 20, 2023 10:55 pm

grifindorec писал(а):
Вт май 16, 2023 12:35 pm
fandaymon писал(а):
Ср май 10, 2023 3:36 pm
grifindorec писал(а):
Ср май 10, 2023 10:12 am
fandaymon писал(а):
Пн май 08, 2023 1:26 am
grifindorec писал(а):
Чт май 04, 2023 7:17 pm
Добрый день.
Можете подсказать, где в sql хранится длина строк данного модуля?
Дело в том, что данные от устройства полностью не помещаются в необходимый мне столбец.
Что-то такое длина строк?! Что за устройство, что за данные?
Тип устройства sp. Дверной звонок. При нажатии на сам звонок никакие свойства устройства не меняются, кроме "185". Опытным путем в ЛК tuya iot было выяснено, что при нажатии на звонок последние 4 знака данных всегда одинаковые. Проблема в том, что данные в это свойство 185 полность не помещается как раз на эти 4 знака.
Мммм... Интересно - такое мне ещё не попадалось... А когда звонок не нажат, то 4 знака разные?

Значения хранятся в таблице tucommands в поле VALUE varchar(255) NOT NULL DEFAULT ''
Вот к примеру, если нажать на звонок с разницей в минуту.
eyJ2IjoiNS4wIiwiY21kIjoiaXBjX2Rvb3JiZWxsIiwidHlwZSI6ImltYWdlIiwid2l0aCI6InJlc291cmNlcyIsImZpbGVzIjpbWyJ0eS1ldS1zdG9yYWdlMzAtcGljIiwiL2NjZGQzYi00MDIyMTAyNC1od3hkNzU0NzEwM2U0ODZkYjQ4ZS9kZXRlY3QvMTY4MjkzNjUyNi5qcGVnIiwiYmJmYWE0ZDRiNGFhYjRkNCIsIjE2ODU1Mjg1MjgiXV19

eyJ2IjoiNS4wIiwiY21kIjoiaXBjX2Rvb3JiZWxsIiwidHlwZSI6ImltYWdlIiwid2l0aCI6InJlc291cmNlcyIsImZpbGVzIjpbWyJ0eS1ldS1zdG9yYWdlMzAtcGljIiwiL2NjZGQzYi00MDIyMTAyNC1od3hkNzU0NzEwM2U0ODZkYjQ4ZS9kZXRlY3QvMTY4Mjg3NjU1My5qcGVnIiwiOGY4OTIzNjlhOTg1ZWY4OCIsIjE2ODU0Njg1NTYiXV19
Как видно, последние символы XV19 совпадают.
Вот что приходит, если у звонка сработал датчик движения:
eyJ2IjoiNS4wIiwiY21kIjoiaXBjX21vdGlvbiIsInR5cGUiOiJpbWFnZSIsIndpdGgiOiJyZXNvdXJjZXMiLCJmaWxlcyI6W1sidHktZXUtc3RvcmFnZTMwLXBpYyIsIi9jY2RkM2ItNDAyMjEwMjQtaHd4ZDc1NDcxMDNlNDg2ZGI0OGUvZGV0ZWN0LzE2ODQyMjgyNzcuanBlZyIsIjc2NjY0MmY2NTI1MGYwMDYiLCIxNjg2ODIwMjc5Il1dfQ==

eyJ2IjoiNS4wIiwiY21kIjoiaXBjX21vdGlvbiIsInR5cGUiOiJpbWFnZSIsIndpdGgiOiJyZXNvdXJjZXMiLCJmaWxlcyI6W1sidHktZXUtc3RvcmFnZTMwLXBpYyIsIi9jY2RkM2ItNDAyMjEwMjQtaHd4ZDc1NDcxMDNlNDg2ZGI0OGUvZGV0ZWN0LzE2ODQyMjc3NDMuanBlZyIsIjYxZmI1NzlmMTJmMDViYjAiLCIxNjg2ODE5NzQ1Il1dfQ==
Тут как видно, тоже совпадает.

Изменил на VALUE varchar(300) utf8_general_ci. Данные все равно отобразились неполные. Возможно дело не в длине.
Приложу скрин, что в Tuya Iot показывает.
Как верно указал товарищ Одинволк, тут действительно кодируется base64

{"v":"5.0","cmd":"ipc_doorbell","type":"image","with":"resources","files":[["ty-eu-storage30-pic","/ccdd3b-40221024-hwxd7547103e486db48e/detect/1682936526.jpeg","bbfaa4d4b4aab4d4","1685528528"]]}

последние цифры это скорее всего просто текущее время. Я смотрю, что тут содержится ссылка на снимок. Только не очень понятно по какому адресу обращаться - может быть к локальному камеры?

А когда есть движение, то выдаёт

{"v":"5.0","cmd":"ipc_motion","type":"image","with":"resources","files":[["ty-eu-storage30-pic","/ccdd3b-40221024-hwxd7547103e486db48e/detect/1684227743.jpeg","61fb579f12f05bb0","1686819745"]]}
fandaymon
Сообщения: 1528
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 564 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Сб май 20, 2023 11:15 pm

odinvolk писал(а):
Вт май 16, 2023 11:46 pm
В webrtc пока не разбирался
Есть мысли как реализовать? Буду благодарен
У туи на IOT раньше была ссылка на програмку под GO (возможно и сейчас есть, но я что-то не вижу) - она представляет из себя веб-сервер на котором крутится страничка с выводом камеры. Там на самом деле довольно сложно всё реализовано

ПО кнопке идёт запрос к IOT облаку за конфигурацией WebRTC. Из этой конфигурации мы получаем по какому ключу надо обращаться к MQTT, далее запрашиваем по MQTT адрес, постим команду начать трансляцию и получаем в video html страницы видео с камеры...
Я пытался во всём это разобраться, но какая-то часть реализована на go, какая-то на js - на языках которые я очень плохо знаю, и в связи с нехваткой времени как-то всё это заглохло. Но откомпилировать и запустить программу удалось - действительно всё работает

HLS/RTSP получить гораздо проще -

Что-то типа такого

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

$uid = $tuya_module->config['TUYA_UID'];
$device_id = 'тут локальный ид камеры';
$data =    array(
        'type' => 'hls',
    );

$r_c = $tuya_module->Tuya_IOT_POST('/v1.0/users/'.$uid.'/devices/'.$device_id.'/stream/actions/allocate', $data,  0);
получаем Json

{
"result": {
"url": "https://wework1.****.com:554/hls/6c08578d89****411afye1/c146ioh525qd7j2l1590315x7E7xNu6PW3kXSfQL.m3u8?signInfo=PnwWBVmaoNSubTJ7Fb1cjsJNXZeuXn%2F2k2FFwNS6EuYlD5f3UtciKvNxIyYUHsKvODeI6nmDP3y51sWbXVfqbFu6q9PDNDG005cRkSWnfzA%2BxYuq1JMeJoJvWb8uJd5YNtMlbGcsQ81knGoMXCDtJC9fyY%2FPkEyXQyGntlHzVd0%3D"
},
"t": 1615358306701,
"success": true
}

url загоняем в какой-нибудь vlc - и видим поток с камеры. Но! Задержка несколько секунд, потому что этот поток идёт через облако
За это сообщение автора fandaymon поблагодарил:
odinvolk (Вс май 21, 2023 9:18 pm)
Рейтинг: 1.18%
Ответить