Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение olehs » Ср май 27, 2020 2:31 pm

Коллеги, спасибо, что развиваете тему!
Зависания и были той причиной, по которой я забросил дальнейшее развитие проекта.
Зависания происходят в библиотеке BLE - она очень сырая и рассчитана на одноразовые коннекты, а не поддержание длительных коннектов к нескольким устройствам. Я начинал ее копать (собственно потому проект и включает собственную версию библиотеки), но мне не хватило времени и сил.
Могу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
За это сообщение автора olehs поблагодарили (всего 2):
Divan (Ср май 27, 2020 2:37 pm) • exo (Ср май 27, 2020 6:11 pm)
Рейтинг: 2.33%
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение Divan » Ср май 27, 2020 2:35 pm

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 перезапусков, чайник по прежнему на связи :D Продолжаю наблюдение дальше.

Можете посмотреть лог, как все работает.
Лог скетча.txt
(631.54 КБ) 101 скачивание
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение exo » Ср май 27, 2020 5:59 pm

=))))))
это может быть часть сниппета, которая также не работала там где стояла,
не работала же авторизация, хотя было все правильно, UUID совпадал, но не коннектило, я жестко давал МАК вы - имя.
надеюсь костылями выжмем, хотя для проф програмера этот проект раз плюнуть :)
я v7 заточил под homebridge. полдня убил.
Прочел сообщение выше, подкорректировал предположения. :)
Последний раз редактировалось exo Ср май 27, 2020 6:20 pm, всего редактировалось 2 раза.
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение exo » Ср май 27, 2020 6:15 pm

olehs писал(а):
Ср май 27, 2020 2:31 pm
Зависания и были той причиной, по которой я забросил дальнейшее развитие проекта.
Балин, над было здесь написать :))) мы то тоже долбимся об стену. Но опыта у намного меньше.
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение exo » Ср май 27, 2020 6:27 pm

olehs писал(а):
Ср май 27, 2020 2:31 pm
Могу только указать направление, куда копать: зависания связаны с синхронизацией потоков в библиотеке (события приходят в отдельном потоке). Библиотека зависает в семафорах, ждущих эти события. Т.к. это происходит с задержкой до нескольких часов, отловить у меня их не получилось.
Ну вот решение с ребутом ? К чему держать 24/7 связь до залипания ?? ребут занимает максимуму 10 сек, если убрать скан, итого быстрее. нге каждый раз, но через время.
смысла не каждые 5 сек сканить, забивать потоки, 10-30 сек вполне норм. обратная связь же все равно вызывается по событиям, не нужно ждать полминуты.
новый бут= новые потоки = новые семафоры :))
по моим наблюдениям, завис происходит при отсутствии действий, утром обычно капец, что в пользу "теории"
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение Divan » Ср май 27, 2020 10:13 pm

Сегодня у меня рекорд. ESP32 c добавленным кодом до сих пор работает и держит связь с чайником, сначала мониторил работу платы через Мониторинг про (логи я вам уже выкладывал), потом подключил к блоку питания на кухне. За весь день так и не пропала связь, как подключил на кухне, то я, ни разу не перезапускал плату. На данный момент я доволен :D Посмотрим, что будет завтра.

Тот самый код
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
скетч r4sGate 2.jpg (114.07 КБ) 2533 просмотра
по логам, как вы видите, он не сканирует чайник каждые 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
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение exo » Чт май 28, 2020 6:23 am

отлично, будем надеяться что костыль проканает.

у меня с исправлениями как то туговато плата начала работать, было бы не плохо, что бы код проверил ктот-то из профи :)
по ESPeasy ничего сказать не могу, думаю туда проект просто так не перетащишь. Я пытался один раз ее установить, но более предметно разобрать не было времени.
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение Divan » Чт май 28, 2020 2:02 pm

Сегодня в 13:20 отвалилась связь с чайником, плата продержалась сутки. Это уже на много лучше, чем было.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение exo » Чт май 28, 2020 6:24 pm

будет смотреть. у меня тоже почти сутки
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Шлюз на базе ESP32 для R4S-устройств (Ready for Sky/Nordic)

Сообщение Divan » Чт май 28, 2020 7:29 pm

Я немного подкорректировал скетч, увеличил интервал запуска сканирования до 120 секунд, добавил false и две строчки кода. Посмотрим как будет держаться связь с чайником.

pBLEScan->stop(); // стоп сканирование
pBLEScan->clearResults(); // удаление результатов из буфера сканирования BLE для освобождения памяти, чтобы не забивать память результатами сканирования
СпойлерПоказать
Безымянный 2.jpg
Безымянный 2.jpg (136.2 КБ) 2472 просмотра
Вот сам код, можете вставить и попробовать

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

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
Ответить