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

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

Модератор: immortal

Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение Divan »

Блин а можно прикрутит вот это сюда ?
https://github.com/aprosvetova/xiaomi-kettle
что скажете?
В этот скетч нет, он написан для чайника Redmond, но можно попробовать сделать это через WiFi-IoT. У WiFi-IoT BT HUB пока нет поддержки чайника.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

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

Сообщение tarasfrompir »

Divan писал(а): Вт июн 02, 2020 9:42 pm
Блин а можно прикрутит вот это сюда ?
https://github.com/aprosvetova/xiaomi-kettle
что скажете?
В этот скетч нет, он написан для чайника Redmond, но можно попробовать сделать это через WiFi-IoT. У WiFi-IoT BT HUB пока нет поддержки чайника.
ну это видел - но тоже пока глухо
а в этот скетч можно добавить по идее - потому что способ авторизации и передача данных не меняется, а только количество данных меняется... но уж нет так нет
Спасибо нам ПОМОЖЕТ..!
alutov
Сообщения: 44
Зарегистрирован: Пт июн 05, 2020 7:26 am

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

Сообщение alutov »

Тоже использую этот код для связи с чайником RK-M173S. Пробую прикрутить асинхронный MQTT, пока еще сыровато.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается:
FreeRTOS.rar
(2.28 КБ) 182 скачивания
Вроде бы помогло пережить ночь. ;) Но есть и другая проблема, это утечка памяти. Для ее проверки я вставлял в тело цикла строку:
ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение Divan »

alutov писал(а): Пт июн 05, 2020 6:20 pm Тоже использую этот код для связи с чайником RK-M173S. Пробую прикрутить асинхронный MQTT, пока еще сыровато.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: FreeRTOS.rar
Вроде бы помогло пережить ночь. ;) Но есть и другая проблема, это утечка памяти. Для ее проверки я вставлял в тело цикла строку:
ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
Спасибо за ваше участие, надо это попробовать, потому что вы правильно сказали, что память забивается логами, именно это и вызывает зависание платы + нестабильная связь. Два фактора нужно устранить. У меня 4 сутки проработало нормально и зависло. Попробую вашу рекомендацию.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am

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

Сообщение exo »

Спасибо за участие. Залил, наблюдаю
Тоже смотрел на FreeRTOS.rar с семафорами. Но так как нихрена не понимаю :) отложил. Но автор указал на проблему в этом направлении. Отлично что нашелся спец, который нашел хотя бы вариант. И целых 2 утечки.
exo
Сообщения: 40
Зарегистрирован: Вт апр 11, 2017 11:06 am

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

Сообщение exo »

Изображение
Только что заглох. Это график активности MQTT. Видно что к "кончине" работает все с большими паузами выкидывая инфо пачками, и никак не раз в 5 сек.
Чайник шевелил. Похоже плата уходит в зависон. Перегрузка помогает.
upd. Чтото сегодня беда. Проработало несколько мин и ушло в оффлайн. От компа до чайника не добивает, ставлю поближе к чайнику. Поэтому посмотреть в порт, че с ней происходит не могу.
alutov
Сообщения: 44
Зарегистрирован: Пт июн 05, 2020 7:26 am

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

Сообщение alutov »

Тяжело сказать, что еще виснет. Вот мой вариант: https://yadi.sk/d/a1r3iUwplJqfkg, для однозначности в бинарном виде . Грязных костылей нет. Шьется одним файлом с адреса 0 на стертую есп. После чего в роутере нужно открыть гостевой wifi "r4s" с паролем "12345678" и в браузере настроить Wifi и Mqtt. Имя чайника лучше оставить пустым, тогда есп будет искать его по uuid. После оригинального скетча в браузере может остаться переадресация с ip на ip/r4s, и тогда в нем нужно почистить настройки сайта. Сам тестирую на RK-M173S. Интересует, в первую очередь, тест на зависание.
Последний раз редактировалось alutov Ср июн 17, 2020 8:05 am, всего редактировалось 12 раз.
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение Divan »

Тяжело сказать, что еще виснет. Вот мой вариант https://yadi.sk/d/mQCfnzd-NJRLmA , для однозначности в бинарном виде . Грязных костылей нет. Шьется одним файлом с адреса 0 на стертую есп. После чего в роутере нужно открыть гостевой wifi "r4s" с паролем "12345678" и в браузере настроить Wifi и Mqtt. Имя чайника лучше оставить пустым, тогда есп будет искать его по uuid. После оригинального скетча в браузере может остаться переадресация с ip на ip/r4s, и тогда в нем нужно почистить настройки сайта. Сам тестирую на RK-M173S. Интересует, в первую очередь, тест на зависание.

Спасибо за ваше участие. Есть вопросы.

1) Почему нужно открывать гостевой доступ?
2) Можно ли подключить к имеющейся точке доступа?
3) Как прошивать, через flash download tool 3.8.5? Какой код нужно указывать при прошивке? Так вы делаете?
SPOILERSPOILER_SHOW
Безымянный.jpg
Безымянный.jpg (129.81 КБ) 3554 просмотра
4) Если есть другие устройства с BLE, он сможет связаться с чайником? - Ведь имя указывается для того, чтобы связь была только с чайником и отсекала другие устройства с BLE.
5) В вашем случае сколько дней была связь с чайником?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение Divan »

alutov писал(а): Пт июн 05, 2020 6:20 pm Тоже использую этот код для связи с чайником RK-M173S. Пробую прикрутить асинхронный MQTT, пока еще сыровато.
По зависаниям. Тоже есть эта проблема, но хотелось бы решить ее без костылей. Вчера пробовал рекомендацию из https://github.com/nkolban/esp32-snippets/issues/874 о правке файла FreeRTOS.cpp. У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: FreeRTOS.rar
Вроде бы помогло пережить ночь. ;) Но есть и другая проблема, это утечка памяти. Для ее проверки я вставлял в тело цикла строку:
ESP_LOGW("TAG", "%d: - RAM left %d", __LINE__, esp_get_free_heap_size());
При работе шлюза наблюдал в дебаге постепенное уменьшение свободной памяти. Обнаружил 2 утечки. Первая это диагностический вывод по ключу #define R4S_LOG_EXCHANGE в файле r4scfg.h. При комментировании ключа и запрете вывода одна утечка уходит. Вторая проблема в процедуре r4sWrite в файле R4S.cpp. Уж не знаю почему и как, но при замене строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];" уходит вторая утечка памяти. Продолжаю наблюдать.
Попробовал такой способ
У меня он лежит в папке "C:\Documents and Settings\Andrew\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\BLE\src\". Там нужно поправить 2 строки, 68 и 194. Файлик прилагается: FreeRTOS.rar
мой чайник SkyKettle G240S терял связь чаще, чем до этого.

Я не понял где именно нужно менять эти строки "uint8_t* buffer = new uint8_t[sz];" на "byte buffer[32];", может я не так меняю?
Если я меняю просто "byte buffer[32];", то при проверке скетча всплывает ошибка.
SPOILERSPOILER_SHOW
ошибка.jpg
ошибка.jpg (102.02 КБ) 3545 просмотров
Хотя тут size_t sz = 4 уже указан объем памяти в 4 МБ (это весь объем памяти ESP32), мне думается, что тут нет смысла копаться. Нужно добавить код, который бы чистил память ESP от логов каждые сутки, тогда память не будет забиваться и ESP не будет зависать
SPOILERSPOILER_SHOW
размер памяти.jpg
размер памяти.jpg (84.88 КБ) 3545 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
alutov
Сообщения: 44
Зарегистрирован: Пт июн 05, 2020 7:26 am

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

Сообщение alutov »

1) При старте есп ищет сеть wifi с параметрами ssid "r4s" и паролем "12345678". После подключения и установки параметров wifi эта сеть больше не нужна.
2) Да, после ввода ее параметров. Гостевая нужна только для первичной настройки.
3) Да, все так, адрес 0x0000.
4) Все как в оригинальном скетче. если имя пустое чайник соединяется по айдишнику. У меня это работает. Если не получается, пробуйте по имени. Имя еще, наверное, пригодится, если 2 разных чайника ;).
5) Пока 8 часов. Но файл вчерашний.
Бинарник сделан на 4МБ памяти,если что. Менял много и в разных местах. Исходники, если кому интересно, залил на гит https://github.com/alutov/r4sGate/, для сборки вместо PubSubClient нужны 2 библиотеки https://github.com/me-no-dev/AsyncTCP и https://github.com/marvinroger/async-mqtt-client. Но смысла особого в исходниках нет, кроме погремушек разве что, если виснуть будет так же.

Там выделяется буфер по размеру команды+ 4байта. Я выделяю всегда 32 байта. У меня так:
SPOILERSPOILER_SHOW
uint8_t r4sWrite(uint8_t cmd, uint8_t* data, size_t len) {
size_t sz = 4 + len; // 55, counter, cmd, AA
// uint8_t* buffer = new uint8_t[sz];
byte buffer[32];
buffer[0] = 0x55;
buffer[1] = r4scounter;
buffer[2] = cmd;
buffer[sz - 1] = 0xAA;
if (len > 0) {
memcpy(&buffer[3], data, len);
}

// try {
pRemoteTXCharacteristic->writeValue(buffer, sz);
#ifdef R4S_LOG_EXCHANGE
log_i(">> %s", BLEUtils::buildHexData(NULL, buffer, sz));
#endif
// } catch (...) {
// log_d("writeValue failed");
// }
return r4scounter++;
}
Ответить