[Модуль] Tuya

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

Модератор: immortal

fandaymon
Сообщения: 912
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 30 раз
Поблагодарили: 387 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Пт янв 24, 2020 1:40 am

rapsody писал(а):
Чт янв 23, 2020 11:26 pm
Не похоже на фаренгейта. Не нашел настроек модуля, они есть в каком то файле? Я бы тогда вручную разделил всю температуру на 6.
Не может быть, чтобы делилось на 6. Поскольку данные пересылаются в виде целых чисел, то если нужны десятые значение перед пересылкой умножается на 10, после получения делится (так в розетках вольтаж передаётся, например). Если нужна точность до .5 то умножается на 2 - в других термостатах так, поэтому такая логика зашита в модуле. Но может быть в вашем термостате используется умножение на 10, а модуль вместо того, чтобы разделить полученную цифру на 10, делит её на 2 - получается умножение на 5
Сейчас прямого доступа к настройкам метрик нету, постараюсь на выходных сделать, но можно в phpmyadmin найти в табличке tucommands нужную метрику (ориентироватся по полю TITLE) и поменять DIVIDEDBY2 с 1 на 0, а DIVIDEDBY10 с 0 на 1. После этого данные будут делится не на 2, а на 10
rapsody писал(а):
Чт янв 23, 2020 11:26 pm
Термостат называется Ketotek, такой же есть Moes. Все эти термостаты одна и та же петрушка, которая интегрируется в Tuya и SmarLife.

Что действительно убивает, так это то, если включить термостат через MJDM, а потом выключить его вручную на устройстве, либо через приложение Tuya, то текущее выключенное состояние не подхватывает MJDM и естественно через несколько секунд его включает обратно. Т.е. нет обратной связи включения и выключения.
Если он выключается, а потом включается, то связь как раз есть - видимо не правильно настроена связка метрика - ПУ термостата. Если не сложно, сделайте скрин вкладки Данные для термостата. Заодно я увижу какие там вообще есть метрики
За это сообщение автора fandaymon поблагодарил:
rapsody (Пт янв 24, 2020 2:14 am)
Рейтинг: 1.25%
rapsody
Сообщения: 13
Зарегистрирован: Ср янв 22, 2020 12:19 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: [Модуль] Tuya

Сообщение rapsody » Пт янв 24, 2020 2:24 am

Видимо вы правы, идет умножение на 5! В прилагаемых скриншотах current_temperature указана 30, на самом деле температура в помещение 6 градусов.

Плюс как то странно ведет себя метрика temperature и online. Я делал скриншоты с разницей в минуту. До момента взятия скриншотов устройство было включено уже несколько минут. Видим что метрика online была 0, потом стала 1. Может быть так и должно быть, не знаю.

Но вот параметр temperature указан 220, хотя физически на термостате выставлена температура 22 гр. Видимо в этой метрике идет умножение на 10.

В любом случае, спасибо за помощь и разработку модулей, простите нас дураков ))
1.jpg
1.jpg (151.92 КБ) 363 просмотра
2.jpg
2.jpg (258.79 КБ) 363 просмотра
3.jpg
3.jpg (296.74 КБ) 363 просмотра
4.jpg
4.jpg (315.13 КБ) 363 просмотра
5.jpg
5.jpg (257.88 КБ) 363 просмотра
fandaymon
Сообщения: 912
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 30 раз
Поблагодарили: 387 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Пт янв 24, 2020 12:04 pm

rapsody писал(а):
Пт янв 24, 2020 2:24 am
Видимо вы правы, идет умножение на 5! В прилагаемых скриншотах current_temperature указана 30, на самом деле температура в помещение 6 градусов.
Сразу вижу ошибку - не надо привязывать и свойство и метод - так у вас любое действие будет отрабатывать 2 раза. Например, когда вы выключаете термостат вручную, то через какое-то время в модуль приходит новый статус, обновляется связанное свойство и тут же отрабатывает метод свитч и заново включает термостат. Надо оставить привязку ТОЛЬКО свойства status
И тоже самое с остальными метриками
rapsody
Сообщения: 13
Зарегистрирован: Ср янв 22, 2020 12:19 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: [Модуль] Tuya

Сообщение rapsody » Пт янв 24, 2020 4:33 pm

Поправил. Убрал методы. Кстати, залез в БД и поставил единицы и нули как вы рекомендовали. Значения всех температур пришли в норму.
Единственное, не понял что за метрика: max_temper со значением 1220. Как это число не дели, толкового ничего не выходит.
fandaymon
Сообщения: 912
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 30 раз
Поблагодарили: 387 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Пт янв 24, 2020 4:48 pm

rapsody писал(а):
Пт янв 24, 2020 4:33 pm
Поправил. Убрал методы. Кстати, залез в БД и поставил единицы и нули как вы рекомендовали. Значения всех температур пришли в норму.
Ну и отлично!
rapsody писал(а):
Пт янв 24, 2020 4:33 pm
Единственное, не понял что за метрика: max_temper со значением 1220. Как это число не дели, толкового ничего не выходит.
А какое число стоит в приложении Tuya?
mihas
Сообщения: 41
Зарегистрирован: Пт окт 04, 2019 11:20 am
Благодарил (а): 24 раза
Поблагодарили: 4 раза

Re: [Модуль] Tuya

Сообщение mihas » Пт янв 24, 2020 11:30 pm

mihas писал(а):
Вт янв 21, 2020 7:15 pm
fandaymon писал(а):
Вт янв 14, 2020 5:26 pm

А в логах ничего нету? По идее, если соединение не устанавливается или устройство не отвечает, то в логе должна быть запись об ошибке
Это что касается локального статуса. А с облачным надо будет посмотреть за рефреш токеном - возможно я время до которго действует токен не совсем верно трактую. Добавляю себе в туду
В логах ничего не видел. Может нитуда смотрел? В каком именно логе отображается это?
Вообще за январь пока таких глюков не было, больше. Может оно само вылечилось, не знаю)

Буду очень благодарен за труд!)
Сегодня опять такое было 2а раза. Один раз не включился, другой не выключился. Вот что в логах api_slow в этот момент было:
03:58:39 0.89338800 Result [18.2319] of : /api.php/modulePropertySet/tuya?object=Kotel&property=status&value=1&no_session=1 {"requ
est":{"url":"\/api.php\/modulePropertySet\/tuya","params":{"object":"Kotel","property":"status","value":"1","no_session":"1"}},"se
tHandleResult":null,"result":true,"passed":18.2319}
15:01:22 0.09338000 Result [5.1187] of : /api.php/modulePropertySet/tuya?object=Kotel&property=status&value=0&no_session=1 {"reque
st":{"url":"\/api.php\/modulePropertySet\/tuya","params":{"object":"Kotel","property":"status","value":"0","no_session":"1"}},"set
HandleResult":null,"result":true,"passed":5.1187}
Еще в модуле все время предупреждение красным "Цикл остановлен"
А в логе в это время вот что
23:44:52 0.90416200 Starting service cycle_tuya (./scripts/cycle_tuya.php)
23:45:00 0.04868700 Thread closed: cycle_tuya
Ага, ошибочка. Надо $this-> на $tuya_module-> заменить.
pi@MajorDoMoPi:/var/www/html/scripts $ php cycle_tuya.php
00:08:09 Running cycle_tuya.php
00:08:09 Init Tuya
00:08:09 Discover period - 2 seconds

Fatal error: Uncaught Error: Using $this when not in object context in /var/www/html/scripts/cycle_tuya.php:54
Stack trace:
#0 {main}
thrown in /var/www/html/scripts/cycle_tuya.php on line 54
ERROR: http://
Uncaught Error: Using $this when not in object context in /var/www/html/scripts/cycle_tuya.php:54
Stack trace:
#0 {main}
thrown
Вложения
cycle_tuya.php.zip
Рабочий файл. И немного причесал код под PSR
(1.09 КБ) 26 скачиваний
За это сообщение автора mihas поблагодарил:
fandaymon (Сб янв 25, 2020 3:02 am)
Рейтинг: 1.25%
fandaymon
Сообщения: 912
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 30 раз
Поблагодарили: 387 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Сб янв 25, 2020 3:02 am

mihas писал(а):
Пт янв 24, 2020 11:30 pm


Еще в модуле все время предупреждение красным "Цикл остановлен"
А в логе в это время вот что
23:44:52 0.90416200 Starting service cycle_tuya (./scripts/cycle_tuya.php)
23:45:00 0.04868700 Thread closed: cycle_tuya
Ага, ошибочка. Надо $this-> на $tuya_module-> заменить.
И правда... Заменил. Большое спасибо!

А в логе error при этом не было ошибок? Sended ... from ... Или socket error?
В интернетах народ пишет, что с интервалом меньше 5 секунд локальное управление работает не очень хорошо...
Ещё можно попробовать в 461 строке вместо 3 вписать 10
За это сообщение автора fandaymon поблагодарил:
mihas (Сб янв 25, 2020 10:42 am)
Рейтинг: 1.25%
mihas
Сообщения: 41
Зарегистрирован: Пт окт 04, 2019 11:20 am
Благодарил (а): 24 раза
Поблагодарили: 4 раза

Re: [Модуль] Tuya

Сообщение mihas » Сб янв 25, 2020 9:06 am

fandaymon писал(а):
Сб янв 25, 2020 3:02 am

А в логе error при этом не было ошибок? Sended ... from ... Или socket error?
В интернетах народ пишет, что с интервалом меньше 5 секунд локальное управление работает не очень хорошо...
Ещё можно попробовать в 461 строке вместо 3 вписать 10
Неа, в логах про сокет ничего небыло.
Сегодня ночью опять такой глюк был. Думаю это из-за плохой связи устройства с wifi, но все равно не понятно почему статус не считывается после восстановления соединения.
Да какой 5 секунд, он обычно не чаще чем раз в час включает/выключает.
Посмотрю что там в строке спасибо.
mihas
Сообщения: 41
Зарегистрирован: Пт окт 04, 2019 11:20 am
Благодарил (а): 24 раза
Поблагодарили: 4 раза

Re: [Модуль] Tuya

Сообщение mihas » Сб янв 25, 2020 11:02 am

fandaymon писал(а):
Сб янв 25, 2020 3:02 am
А в логе error при этом не было ошибок? Sended ... from ... Или socket error?
В интернетах народ пишет, что с интервалом меньше 5 секунд локальное управление работает не очень хорошо...
Ещё можно попробовать в 461 строке вместо 3 вписать 10
В режиме дебага если запустить цикл, то в $token вот такое выскакивает:
stdClass Object
(
[responseStatus] => error
[errorMsg] => Get accesstoken failed. Invalid parms.
)
В лог не попадает, т.к. записывается $token->responseMsg, а не errorMsg
Предлагаю этот кусок написать так:
$token = json_decode($tuya_module->getToken($tuya_username, $tuya_passwd, $tuya_bztype, $tuya_ccode));
if($token->access_token) {
$tuya_module->config['TUYA_ACCESS_TOKEN'] = $token->access_token;
$tuya_module->config['TUYA_REFRESH_TOKEN'] = $token->refresh_token;
$tuya_module->config['TUYA_TIME'] = time() + $token->expires_in;
$tuya_module->Tuya_Discovery_Devices($token->access_token);

$tuya_module->saveConfig();
} else {
debmes("Tuya: get token error with message '" . $token->errorMsg . "'");
}
Ага, countryCode был не заполнен почему-то.

В методе TuyaLocalMsg при запросе статуса
$data = $this->Tuya_send_receive(hex2bin($buffer), $local_ip);
В $data возвращается data format error. Т.к. я не знаком с протоколом, то дальше понять что не так не могу (

Прикрепил файлы с правками, чтобы ошибки в лог писались
Вложения
tuya.class.php.zip
(5.39 КБ) 28 скачиваний
cycle_tuya.php.zip
(1.08 КБ) 21 скачивание
За это сообщение автора mihas поблагодарил:
fandaymon (Сб янв 25, 2020 8:52 pm)
Рейтинг: 1.25%
fandaymon
Сообщения: 912
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 30 раз
Поблагодарили: 387 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Сб янв 25, 2020 9:10 pm

mihas писал(а):
Сб янв 25, 2020 11:02 am
fandaymon писал(а):
Сб янв 25, 2020 3:02 am
А в логе error при этом не было ошибок? Sended ... from ... Или socket error?
В интернетах народ пишет, что с интервалом меньше 5 секунд локальное управление работает не очень хорошо...
Ещё можно попробовать в 461 строке вместо 3 вписать 10
В режиме дебага если запустить цикл, то в $token вот такое выскакивает:
stdClass Object
(
[responseStatus] => error
[errorMsg] => Get accesstoken failed. Invalid parms.
)
В лог не попадает, т.к. записывается $token->responseMsg, а не errorMsg
Предлагаю этот кусок написать так:
$token = json_decode($tuya_module->getToken($tuya_username, $tuya_passwd, $tuya_bztype, $tuya_ccode));
if($token->access_token) {
$tuya_module->config['TUYA_ACCESS_TOKEN'] = $token->access_token;
$tuya_module->config['TUYA_REFRESH_TOKEN'] = $token->refresh_token;
$tuya_module->config['TUYA_TIME'] = time() + $token->expires_in;
$tuya_module->Tuya_Discovery_Devices($token->access_token);

$tuya_module->saveConfig();
} else {
debmes("Tuya: get token error with message '" . $token->errorMsg . "'");
}
Ага, countryCode был не заполнен почему-то.

В методе TuyaLocalMsg при запросе статуса
$data = $this->Tuya_send_receive(hex2bin($buffer), $local_ip);
В $data возвращается data format error. Т.к. я не знаком с протоколом, то дальше понять что не так не могу (

Прикрепил файлы с правками, чтобы ошибки в лог писались
Спасибо за коррекции - добавил. В принципе можно прям Pull Requestaми на Github делать https://github.com/fandaymon/majordomo-tuya

Заодно добавил флажки

1. Управлять через облако (при наличии айпи и ключа - статус считывается локально, а управление идёт через облако)
2. Статус только локально (соответственно для данного устройства статус из облака не используется)

По первой ошибке - я недавно добавил код страны в настройки, видимо поэтому он не был внесён. Когда работает рефреш токен, то код страны не используется, а когда нужен был обычный токен, то произошла ошибка

По второй ошибке - в принципе функция возвращает ответ от устройства, сложно сказать формат каких именно данных ему не понравился... А data format error в $data сразу же после вызова функции или после расшифровки?

Про интервал я говорил, который в настройках забит - судя по логу там были 2 секунды...
За это сообщение автора fandaymon поблагодарил:
mihas (Вс янв 26, 2020 10:09 pm)
Рейтинг: 1.25%
Ответить