Страница 7 из 27
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Ср май 27, 2020 2:31 pm
olehs
Коллеги, спасибо, что развиваете тему!
Зависания и были той причиной, по которой я забросил дальнейшее развитие проекта.
Зависания происходят в библиотеке BLE - она очень сырая и рассчитана на одноразовые коннекты, а не поддержание длительных коннектов к нескольким устройствам. Я начинал ее копать (собственно потому проект и включает собственную версию библиотеки), но мне не хватило времени и сил.
Могу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Ср май 27, 2020 2:35 pm
Divan
static uint8_t bleConnectRetries = 1; // Device connect retries before going offline
static uint8_t bleConnectRetriesBeforeRescan = 4; // Device reconnect retries before starting new scan
это было в скетче,

) я про параметры, выкрутить на макс, посмотреть что будет. я думаю это значение параметра "состояния в онлайн", статус потом выкидывает в мкутт, на физический коннект влиять не может.
Плата esp32 умеет засыпать, не это ли провоцирует проблему.
Получилось круто ). Я смотрю по логам, идет перезапуск после разрыва связи с чайником, а до этого просто все вставало намертво. Сейчас у меня за 1 час было 10 перезапусков, чайник по прежнему на связи

Продолжаю наблюдение дальше.
Можете посмотреть лог, как все работает.
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Ср май 27, 2020 5:59 pm
exo
=))))))
это может быть часть сниппета, которая также не работала там где стояла,
не работала же авторизация, хотя было все правильно, UUID совпадал, но не коннектило, я жестко давал МАК вы - имя.
надеюсь костылями выжмем, хотя для проф програмера этот проект раз плюнуть

я v7 заточил под homebridge. полдня убил.
Прочел сообщение выше, подкорректировал предположения.

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Ср май 27, 2020 6:15 pm
exo
olehs писал(а): Ср май 27, 2020 2:31 pm
Зависания и были той причиной, по которой я забросил дальнейшее развитие проекта.
Балин, над было здесь написать

)) мы то тоже долбимся об стену. Но опыта у намного меньше.
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Ср май 27, 2020 6:27 pm
exo
olehs писал(а): Ср май 27, 2020 2:31 pm
Могу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
Ну вот решение с ребутом ? К чему держать 24/7 связь до залипания ?? ребут занимает максимуму 10 сек, если убрать скан, итого быстрее. нге каждый раз, но через время.
смысла не каждые 5 сек сканить, забивать потоки, 10-30 сек вполне норм. обратная связь же все равно вызывается по событиям, не нужно ждать полминуты.
новый бут= новые потоки = новые семафоры

)
по моим наблюдениям, завис происходит при отсутствии действий, утром обычно капец, что в пользу "теории"
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Ср май 27, 2020 10:13 pm
Divan
Сегодня у меня рекорд. ESP32 c добавленным кодом до сих пор работает и держит связь с чайником, сначала мониторил работу платы через Мониторинг про (логи я вам уже выкладывал), потом подключил к блоку питания на кухне. За весь день так и не пропала связь, как подключил на кухне, то я, ни разу не перезапускал плату. На данный момент я доволен

Посмотрим, что будет завтра.
Тот самый код
static uint8_t bleConnectRetries = 1; // Device connect retries before going offline
static uint8_t bleConnectRetriesBeforeRescan = 4; // Device reconnect retries before starting new scan
ребут занимает максимуму 10 сек, если убрать скан, итого быстрее. нге каждый раз, но через время.
смысла не каждые 5 сек сканить, забивать потоки, 10-30 сек вполне норм. обратная связь же все равно вызывается по событиям, не нужно ждать полминуты.
новый бут= новые потоки = новые семафоры
в скетче выставлено 30 секунд на запуск сканирования

- скетч r4sGate 2.jpg (114.07 КБ) 3837 просмотров
по логам, как вы видите, он не сканирует чайник каждые 5 секунд, он получает данные с чайника. Хорошо бы иметь удаленный мониторинг платы, залить прошивку ESPEasy и туда же плагин для управления чайником (его нет, нужно писать).
[D][BLERemoteCharacteristic.cpp:164] gattClientEventHandler(): Invoking callback for notification on characteristic Characteristic: uuid: 6e400003-b5a3-f393-e0a9-e50e24dcca9e, handle: 11 0x000b, props: broadcast: 0, read: 0, write_nr: 0, write: 0, notify: 1, indicate: 0, auth: 0
[D][R4S.cpp:42] r4sCommand(): << 5519060300000001370f000000000000800000aa
[D][BLEDevice.cpp:148] gattClientEventHandler(): gattClientEventHandler [esp_gatt_if: 4] ... Unknown
[D][BLEClient.cpp:158] gattClientEventHandler(): gattClientEventHandler [esp_gatt_if: 4] ... Unknown
[D][R4S.cpp:24] r4sWrite(): >> 551a06aa
[D][BLEDevice.cpp:148] gattClientEventHandler(): gattClientEventHandler [esp_gatt_if: 4] ... Unknown
[D][BLEClient.cpp:158] gattClientEventHandler(): gattClientEventHandler [esp_gatt_if: 4] ... Unknown
[D][BLERemoteCharacteristic.cpp:164] gattClientEventHandler(): Invoking callback for notification on characteristic Characteristic: uuid: 6e400003-b5a3-f393-e0a9-e50e24dcca9e, handle: 11 0x000b, props: broadcast: 0, read: 0, write_nr: 0, write: 0, notify: 1, indicate: 0, auth: 0
[D][R4S.cpp:42] r4sCommand(): << 551a060300000001370f000000000000800000aa
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Чт май 28, 2020 6:23 am
exo
отлично, будем надеяться что костыль проканает.
у меня с исправлениями как то туговато плата начала работать, было бы не плохо, что бы код проверил ктот-то из профи

по ESPeasy ничего сказать не могу, думаю туда проект просто так не перетащишь. Я пытался один раз ее установить, но более предметно разобрать не было времени.
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Чт май 28, 2020 2:02 pm
Divan
Сегодня в 13:20 отвалилась связь с чайником, плата продержалась сутки. Это уже на много лучше, чем было.
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Чт май 28, 2020 6:24 pm
exo
будет смотреть. у меня тоже почти сутки
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Добавлено: Чт май 28, 2020 7:29 pm
Divan
Я немного подкорректировал скетч, увеличил интервал запуска сканирования до 120 секунд, добавил false и две строчки кода. Посмотрим как будет держаться связь с чайником.
pBLEScan->stop(); // стоп сканирование
pBLEScan->clearResults(); // удаление результатов из буфера сканирования BLE для освобождения памяти, чтобы не забивать память результатами сканирования

- Безымянный 2.jpg (136.2 КБ) 3776 просмотров
Вот сам код, можете вставить и попробовать
Код: Выделить всё
void setupBLE() {
BLEDevice::init("R4SGATE");
// Retrieve a Scanner and set the callback we want to use to be informed when we
// have detected a new device. Specify that we want active scanning and start the
// scan to run for 120 seconds.
BLEScan* pBLEScan = BLEDevice::getScan(); //create new scan
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
pBLEScan->start(120,false);
pBLEScan->stop();
pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory
pBLEClient = BLEDevice::createClient();
pBLEClient->setClientCallbacks(new MyBLEClientCallbacks());
} // End of setup.