• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

mega2000

Member
проблема в том, что сервер с ХА находится в другом месте и соединяется по ВПН.
т.е сейчас пытаюсь сделать связку: счетчик->ble->esp->router->HA
кажется я сдаюсь :(
 

Slacky

Member
что-то в ночи немного тупанул. сделал связку EspHome bluetooth ble-proxy -->HA , добавились все датчики. осталось вытравить плату и запихнуть в корпус.
У меня уже заказаны платы у китайцев. Сделал под вилку из ЛеруаМерлен. Вот такую.
fork.jpg
fork_inside.jpg
fork_inside2.jpg
fork_inside_maket.jpg
fork_inside_maket2.jpg
fork_maket_back.jpg
Ну и плата
board_pcb.jpg
board_top_2d.jpg
Там останется спереди приклеить окошко из оргстекла (возьму от коробки от CD) и приклеить магнит, типа такого
 

pvvx

Активный участник сообщества
@Slacky - я разобрался с ext.advertise (как обойтись одной, в данных демо-версиях SDK от Telink). Теперь можно использовать полный LE Long Range - это значительно увеличивает расстояние связи.
В HA тоже есть возможность переключить Realtek USB-BT5.0 адаптер в режим Long Range.
Low-cost Realtek RTL8761 BT adapter (current version of Linux fw on RTL8761 supports BT5.1)
1676644115990.png
Для работы HA c LongRange желательно установить последний bluez и добавить в файле /lib/systemd/system/bluetooth.service
ExecStart=/usr/local/libexec/bluetooth/bluetoothd --experimental

Перед запуском HA необходимо переключить USB-BT адаптер на CodedPHY:
hcitool -i hci1 cmd 08 31 03 04 04
Номер hciN - свой, желательно от второго адаптера, а первый пусть принимает стандартные рекламы...
 

mega2000

Member
IMG_20230226_202044.pngСпасибо, всё получилось!
Единственное странно с Power, похоже там должно быть не W, а kW
 

Slacky

Member
Спасибо, всё получилось!
Единственное странно с Power, похоже там должно быть не W, а kW
С power чуть позже разберусь, когда соберу устройство и подключу к реальному счетчику. Пока проверяю все на тестовом приборе, а он всегда показывает мощность 0, так как к нему только светодиодная лампа подключена, но ее недостаточно ...

Кстати, а как запитал?

Тут списался с "Главный конструктор по приборам учета" КАСКАД-11. Он мне прислал протокол обмена на этот счетчик (у соседа такой, спаяю прибор, проверю :)). В общем расширяю функционал ...
 

mega2000

Member
Я решил не мудрить, сделал плату, отдельно на проводах вывел блок питания hkl-03 и подпаяные провода в термоусадку.
Плату прикрепил на термоклей, оказалось хорошо держит. Модель счётчика каскад-1-мт-d5-a1
 

Slacky

Member
Я решил не мудрить, сделал плату, отдельно на проводах вывел блок питания hkl-03 и подпаяные провода в термоусадку.
Плату прикрепил на термоклей, оказалось хорошо держит. Модель счётчика каскад-1-мт-d5-a1
А я решил запитаться через микро-USB и зарядку от телефона. В щитке устанавливаем розетку, типа такой
 

mega2000

Member
По поводу тестовой нагрузки для счётчика: берется торроидальный трансформатор (обычно на 12в для ламп) наматываем 3-4 витка провода пугв-3 или любой другой мягкий. Первичную обмотку трансформатора запитываем как обычно от 220 Schematic_ssd_2023-02-27.png
 

Slacky

Member
По поводу тестовой нагрузки для счётчика: берется торроидальный трансформатор (обычно на 12в для ламп) наматываем 3-4 витка провода пугв-3 или любой другой мягкий. Первичную обмотку трансформатора запитываем как обычно от 220
Не, лень. Платы уже таможню прошли. Так что на днях должны отдать уже ...
 

mega2000

Member
назрела проблема, не хватает 40 секунд для обновления прошивки по воздуху. на 80 процентах обрывается связь
 

pvvx

Активный участник сообщества
назрела проблема, не хватает 40 секунд для обновления прошивки по воздуху. на 80 процентах обрывается связь
Время прошивки зависит от устройства и его "шустрости".
И это известная проблема примеров OTA в SDK, которая легко исправляется.
Счас погляжу, что там в конкретных исходниках у https://slacky1965.github.io/electricity_meter_ble/
 

pvvx

Активный участник сообщества
{0,ATT_PERMISSIONS_RDWR,16,sizeof(my_OtaData),(u8*)(&my_OtaUUID), (&my_OtaData), &otaWrite, NULL},
Меняем на {0,ATT_PERMISSIONS_RDWR,16,sizeof(my_OtaData),(u8*)(&my_OtaUUID), (&my_OtaData), &otaWritePre, NULL},
Вставляем:
Код:
extern u32 blt_ota_start_tick;
int otaWritePre(void * p) {
    blt_ota_start_tick = clock_time() | 1;
    return otaWrite(p);
}
И тайм-аут будет отсчитываться от последней передачи кодов OTA.
Иначе значение тайм-аута увеличить невозможно - будет переполнение его значения в u32.
А указанное решение более правильное.
 

Slacky

Member
назрела проблема, не хватает 40 секунд для обновления прошивки по воздуху. на 80 процентах обрывается связь
Это связь плохая.

Попробуй в ble.c
C:
void app_enter_ota_mode(void)
{
    ota_is_working = true;
    bls_pm_setManualLatency(0);
    bls_ota_setTimeout(40 * 1000000); // set OTA timeout  40 seconds
#if UART_PRINT_DEBUG_ENABLE
    printf("Start OTA update\r\n");
#endif /* UART_PRINT_DEBUG_ENABLE */
}
40 заменить на побольше ...
 

pvvx

Активный участник сообщества
Не выйдет. Нет такой переменной ...
Тогда читайте доку по SDK. Там указана функция, а она обращается к аналогичной переменной....
И это не обязательно плохая связь. Это кривописанина в примерах для переключения интервалов соединения, когда стартует OTA. Там нет даже подтверждения, что адаптер на связи согласился на изменния.
А нет, т.к. это упрощенные примеры, чтобы детей не запутать :)
 
Сверху Снизу