Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Модератор: immortal
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Коллеги, спасибо, что развиваете тему!
Зависания и были той причиной, по которой я забросил дальнейшее развитие проекта.
Зависания происходят в библиотеке BLE - она очень сырая и рассчитана на одноразовые коннекты, а не поддержание длительных коннектов к нескольким устройствам. Я начинал ее копать (собственно потому проект и включает собственную версию библиотеки), но мне не хватило времени и сил.
Могу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
Зависания и были той причиной, по которой я забросил дальнейшее развитие проекта.
Зависания происходят в библиотеке BLE - она очень сырая и рассчитана на одноразовые коннекты, а не поддержание длительных коннектов к нескольким устройствам. Я начинал ее копать (собственно потому проект и включает собственную версию библиотеки), но мне не хватило времени и сил.
Могу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
- Рейтинг: 2.33%
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Получилось круто ). Я смотрю по логам, идет перезапуск после разрыва связи с чайником, а до этого просто все вставало намертво. Сейчас у меня за 1 час было 10 перезапусков, чайник по прежнему на связи Продолжаю наблюдение дальше.static uint8_t bleConnectRetries = 1; // Device connect retries before going offline
static uint8_t bleConnectRetriesBeforeRescan = 4; // Device reconnect retries before starting new scan
это было в скетче, ) я про параметры, выкрутить на макс, посмотреть что будет. я думаю это значение параметра "состояния в онлайн", статус потом выкидывает в мкутт, на физический коннект влиять не может.
Плата esp32 умеет засыпать, не это ли провоцирует проблему.
Можете посмотреть лог, как все работает.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
=))))))
это может быть часть сниппета, которая также не работала там где стояла,
не работала же авторизация, хотя было все правильно, UUID совпадал, но не коннектило, я жестко давал МАК вы - имя.
надеюсь костылями выжмем, хотя для проф програмера этот проект раз плюнуть
я v7 заточил под homebridge. полдня убил.
Прочел сообщение выше, подкорректировал предположения.
это может быть часть сниппета, которая также не работала там где стояла,
не работала же авторизация, хотя было все правильно, UUID совпадал, но не коннектило, я жестко давал МАК вы - имя.
надеюсь костылями выжмем, хотя для проф програмера этот проект раз плюнуть
я v7 заточил под homebridge. полдня убил.
Прочел сообщение выше, подкорректировал предположения.
Последний раз редактировалось exo Ср май 27, 2020 6:20 pm, всего редактировалось 2 раза.
-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Балин, над было здесь написать )) мы то тоже долбимся об стену. Но опыта у намного меньше.
-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Ну вот решение с ребутом ? К чему держать 24/7 связь до залипания ?? ребут занимает максимуму 10 сек, если убрать скан, итого быстрее. нге каждый раз, но через время.olehs писал(а): ↑Ср май 27, 2020 2:31 pmМогу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
смысла не каждые 5 сек сканить, забивать потоки, 10-30 сек вполне норм. обратная связь же все равно вызывается по событиям, не нужно ждать полминуты.
новый бут= новые потоки = новые семафоры )
по моим наблюдениям, завис происходит при отсутствии действий, утром обычно капец, что в пользу "теории"
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Сегодня у меня рекорд. ESP32 c добавленным кодом до сих пор работает и держит связь с чайником, сначала мониторил работу платы через Мониторинг про (логи я вам уже выкладывал), потом подключил к блоку питания на кухне. За весь день так и не пропала связь, как подключил на кухне, то я, ни разу не перезапускал плату. На данный момент я доволен Посмотрим, что будет завтра.
Тот самый код
по логам, как вы видите, он не сканирует чайник каждые 5 секунд, он получает данные с чайника. Хорошо бы иметь удаленный мониторинг платы, залить прошивку ESPEasy и туда же плагин для управления чайником (его нет, нужно писать).
Тот самый код
static uint8_t bleConnectRetries = 1; // Device connect retries before going offline
static uint8_t bleConnectRetriesBeforeRescan = 4; // Device reconnect retries before starting new scan
в скетче выставлено 30 секунд на запуск сканированияребут занимает максимуму 10 сек, если убрать скан, итого быстрее. нге каждый раз, но через время.
смысла не каждые 5 сек сканить, забивать потоки, 10-30 сек вполне норм. обратная связь же все равно вызывается по событиям, не нужно ждать полминуты.
новый бут= новые потоки = новые семафоры
СпойлерПоказать
[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
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
отлично, будем надеяться что костыль проканает.
у меня с исправлениями как то туговато плата начала работать, было бы не плохо, что бы код проверил ктот-то из профи
по ESPeasy ничего сказать не могу, думаю туда проект просто так не перетащишь. Я пытался один раз ее установить, но более предметно разобрать не было времени.
у меня с исправлениями как то туговато плата начала работать, было бы не плохо, что бы код проверил ктот-то из профи
по ESPeasy ничего сказать не могу, думаю туда проект просто так не перетащишь. Я пытался один раз ее установить, но более предметно разобрать не было времени.
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Сегодня в 13:20 отвалилась связь с чайником, плата продержалась сутки. Это уже на много лучше, чем было.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 40
- Зарегистрирован: Вт апр 11, 2017 11:06 am
- Благодарил (а): 3 раза
- Поблагодарили: 1 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
будет смотреть. у меня тоже почти сутки
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)
Я немного подкорректировал скетч, увеличил интервал запуска сканирования до 120 секунд, добавил false и две строчки кода. Посмотрим как будет держаться связь с чайником.
pBLEScan->stop(); // стоп сканирование
pBLEScan->clearResults(); // удаление результатов из буфера сканирования BLE для освобождения памяти, чтобы не забивать память результатами сканирования
Вот сам код, можете вставить и попробовать
pBLEScan->stop(); // стоп сканирование
pBLEScan->clearResults(); // удаление результатов из буфера сканирования BLE для освобождения памяти, чтобы не забивать память результатами сканирования
СпойлерПоказать
Код: Выделить всё
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.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB