• Система автоматизации с открытым исходным кодом на базе 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 всё тоже самое - там просто выпадения не так заметны... скорость падает и всё.
 
Сверху Снизу