• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Дистанционное снятие показаний с электросчетчика КАСКАД-1-МТ с дальнейшей передачей показаний в Home Assistant с помощью BLE

pvvx

Активный участник сообщества
extern u32 blt_ota_start_tick;
ble_sdk_multimode\stack\ble\service\ble_ll_ota.h

u32 ota_start_tick;

struct ota_client_t;
blotaClt.ota_start_tick = clock_time() | 1;
b85m_ble_sdk\vendor\b85m_feature\feature_ota\app_ota_client.c

....
Telink B85m BLE Single Connection SDK Development Handbook:

blotaSvr.process_timeout_us = 30 * 1000000; //default 30s
blotaSvr.packet_timeout_us = 5 * 1000000; //default 5s
After initializing the variable, the user can call the following timeout function to perform the timeout process.
void blt_ota_procTimeout(void);....
 

pvvx

Активный участник сообщества
C:
RAM uint8_t ble_connected; // bit 0 - connected, bit 1 - conn_param_update, bit 2 - paring success, bit 7 - reset of disconnect

void app_enter_ota_mode(void) {
    ota_is_working = 1;
    ble_connected &= ~2;
    bls_pm_setManualLatency(0);
    bls_ota_setTimeout(45 * 1000000); // set OTA timeout  45 seconds
}

int app_conn_param_update_response(u8 id, u16  result) {
    if (result == CONN_PARAM_UPDATE_ACCEPT)
        ble_connected |= 2;
    else if (result == CONN_PARAM_UPDATE_REJECT) {
       // TODO: необходимо подбирать если собеседник не согласен или плюнуть и послать. Пока стоит затычка:
        bls_l2cap_requestConnParamUpdate(160, 200, 0, 2500); // (200 ms, 250 ms, 0, 2.5 s)
    }
    return 0;
}

// Init
    blc_l2cap_registerConnUpdateRspCb(app_conn_param_update_response);

// work
    if (ota_is_working) {
        bls_pm_setSuspendMask (SUSPEND_ADV | SUSPEND_CONN); // SUSPEND_DISABLE
        if ((ble_connected&2)==0)
            bls_pm_setManualLatency(0);
    } else ...
 

pvvx

Активный участник сообщества
// TODO: необходимо подбирать другие параметры соединения если внешний адаптер не согласен или плюнуть и послать. Пока стоит затычка, но до неё ни разу не доходило, т.к. термометры настойчиво требуют отключить latency в 0 :) и соединение переходит в интервал в десятку мс, т.е. как у вас указано... Но лучше вписать disconnect(), т.к. OTA у Telink "безопаcная" можно рвать, бросать сколько угодно.
Практика на лемингах показала, что лучше разорвать такое соединение, т.к. в следующий раз вероятность, что глюк в стороннем адаптере пройдет и он закачает всё за 20..50 сек. Больше 50-ти секунд на макс OTA в 128 кило не требуется, если вы правильно установили интервалы соединения и отключили deep-sleep при страте OTA.
Многие дешман USB-BT адаптеры любят тупить. Но если его вынуть и вставить, то вся OTA пройдет за несколько секунд. Пишите в Windows в прочие ОС - это их бардак (или у вас ESP - тогда OTA будет идти часы).
 

pvvx

Активный участник сообщества
Увеличение интервала для пакетов OTA актуально для Long Range - там скорость низкая и надо уже минуты на сотни кило. У Zigbee или MESH OTA гораздо длиннее и считается в попугаях, т.к. измеряется в других единицах и не катит для сравнения. Сложно сравнивать часы и секунды :)
 

mega2000

Member
Адаптер buro bt-502 достаточно свежий, пытался залить стоя рядом с девайсом. По этому и озвучил проблему.
 

pvvx

Активный участник сообщества
Адаптер buro bt-502 достаточно свежий, пытался залить стоя рядом с девайсом. По этому и озвучил проблему.
Свежий? Ничего это не значит. Есть ещё драйвера в ОС и прошивка в нем.
И многие RTL8761B вообще не рекомендуются для использования. И у него USB1.1 под видом USB2.0FS.
Аналогичные, с RTL8761B у меня чаще всего глючат в WIndows. Выдернуть-вставить помогает на время.
И глючат именно в том, что очень долго находят устройства и как раз медленно передают. Но выдернуть-вставить помогает :)

Например в HA описано:
Эти адаптеры не имеют контакта сброса. Если они перестают отвечать, в настоящее время ядро не может сбросить их автоматически. Общий сброс USB для этих адаптеров был представлен в ядре Linux 6.1 и более поздних версиях.
 

pvvx

Активный участник сообщества
Хотя адаптеры на RTL8761 поддерживают LE Long Range, но они не тянут на полную спецификацию - не могут соединиться с устройством имеющим период рекламы по максимуму в стандарте - 10.x сек.
Скорее всего эта беда в загружаемом ОС FW. И версии загружаемой части FW разные... В Linux это ещё можно менять, а в Windows...
Не знаю что там у вас, но у меня на аналогичный адаптер в Linux я поставил как раз загружаемое FW от Windows, т.к. оно менее глючное из того что нашел и протестировал на своих адаптерах RTL8761.
Но вот это - иногда не желание переключаться на нормальную скорость передачи, пока не "выдернуть-вставить" - не убралось. Видимо этот адаптер, из за низкой скорости связи по USB пропускает некоторые пакеты и ему надо повторять команду переключения интервалов пока система не сообразит.

Как уменьшить эту проблему описано выше. Меняйте код в прошивке датчика.
 

mega2000

Member
Этим адаптером конфигурирую с винды(родной адаптер ноутбука вообще 3.0 версии), а показания снимаются и передаются esp32 с прошивкой esphome-bluetooth-proxy в НА
 

pvvx

Активный участник сообщества
Другая беда у адаптеров с BT5.0 (RTL8761B имеет загружаемую fw с BT5.1) - это когда они автоматом переключаются на 2M PHY по уровню RSSI (когда малое расстояние). А Windows не имеет полной поддержки BT5.1 в части BLE, хотя это декларировано мелкомягкими в Win10 c какой-то версии... Тут тоже помогает "Выдернуть-вставить" эти адаптеры.
Но вам, с данной прошивкой, это не грозит. В прошивке не включено BT5.0
Этим адаптером конфигурирую с винды(родной адаптер ноутбука вообще 3.0 версии), а показания снимаются и передаются esp32 с прошивкой esphome-bluetooth-proxy в НА
Меняйте код в устройстве и всё будет значительно лучше. Но не всегда, для bt-502 - иногда всё равно он будет тупить...
 

pvvx

Активный участник сообщества
Этим адаптером конфигурирую с винды(родной адаптер ноутбука вообще 3.0 версии), а показания снимаются и передаются esp32 с прошивкой esphome-bluetooth-proxy в НА
У вас windows на ноуте какой?
Если ниже - зачем вы пихаете ему адаптер с BT5.1?
Берите с BT4.x - на CSR8510A10 чипе.
 

Slacky

Member
У меня Bluetooth адаптер Buro BU-BT40С и Easy Idea 5.0. С обеими работает нормально.
 

mega2000

Member
У вас windows на ноуте какой?
Если ниже - зачем вы пихаете ему адаптер с BT5.1?
Берите с BT4.x - на CSR8510A10 чипе.
в ноутбуке HP630 стоит win10 x64 и родная wifi карта с блютус на чипе Qualcomm Atheros AR3011 Bluetooth 3.0, по дороге домой купил usb свисток.
 

Slacky

Member
снял со счетчика адаптер, на столе перепрошился за 34 сек.
2. в прошивке 1.3 должен отображать Амперы, но в HA и на странице настройки их нет
Связь плохая. Просто buro с внешней антеной, бьет дальше. А easy idea тоже до ванны не добивает.

Амперы не делал. Т.е. программа их считывает, но не передает в НА. Если очень нужно, можно конечно прикрутить. Но это за собой тянет некоторое изменение а коде, так как одна посылка ограничена 31 байтами. Сейчас это передается двумя пакетами. В одном тарифы, в другом все остальное. Придется делать тремя пакетами.
 

pvvx

Активный участник сообщества
А easy idea тоже до ванны не добивает.
В LE long Range при установке на TLSR 0дБм бьет запросто на сотни метров. Больше пока и не пробовал - нет смысла.
Но этот адаптер достаточно глючный и тормоз ещё тот. Принимает раз в 5 точно меньше реклам в HA и т.д., чем даже простой BT4.2...
снял со счетчика адаптер, на столе перепрошился за 34 сек.
2. в прошивке 1.3 должен отображать Амперы, но в HA и на странице настройки их нет
Все пишут, что SSD и USB3.0 дает помехи на эти адаптеры. Включайте на шнурке и желательно в USB2.0 слот.
С WiFi всё тоже самое - там просто выпадения не так заметны... скорость падает и всё.
 
Сверху Снизу