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

BLE модули TB-04/TB-03F (TLSR8253F512)

pvvx

Активный участник сообщества
Выше неверно - биты не в ту сторону :) LSB...MSB
C:
unit16_t decode_sn(uint16_t s) {
    int i = 7;
    uint16_t x = 0;
    s >>= 1;
    while(i--) {
        x <<= 1;
        x |= s & 1;
        s >>= 1;
    }
    s >>= 1;
    i = 7;
    while(i--) {
        x <<= 1;
        x |= s & 1;
        s >>= 1;
    }
    return x;
}
 

Slacky

Member
Выше неверно - биты не в ту сторону :) LSB...MSB
C:
unit16_t decode_sn(uint16_t s) {
    int i = 7;
    uint16_t x = 0;
    s >>= 1;
    while(i--) {
        x <<= 1;
        x |= s & 1;
        s >>= 1;
    }
    s >>= 1;
    i = 7;
    while(i--) {
        x <<= 1;
        x |= s & 1;
        s >>= 1;
    }
    return x;
}
Я правильно понимаю, что в inbuf мы кладем 5 байт адреса, вместе с клиентским, из пакета? Т.е. 0x5444086f41 ?

А все равно не получается ...

Код:
uint8_t inpbuf[5] = {0x54, 0x44, 0x08, 0x6f, 0x41};

OTA mode disabled. MCU boot from address: 0x8000
hhdlc: 0x112A, lhdlc: 0x3B10, cladr: 0x100
 

pvvx

Активный участник сообщества
В примере (на картинке) дан код UHDLC: 0x1234=0001001000110100b
Младшие 7 бит: 0110100b
Старшие 7 бит: 0100100b
Собираем: к каждым 7 битам добавим 1 бит равный 0 справа:
Итого: 0100100001101000b
Получаем аналогичный итог с картинкой.
 

Slacky

Member
В примере (на картинке) дан код UHDLC: 0x1234=0001001000110100b
Младшие 7 бит: 0110100b
Старшие 7 бит: 0100100b
Собираем: к каждым 7 битам добавим 1 бит равный 0 справа:
Итого: 0100100001101000b
Получаем аналогичный итог с картинкой.
А мне не это нужно :( Как разложить число в пакете я разберусь, там в принципе ничего заумного. Мне нужно понять, как они преобразовывают серийный номер 21021839 (dec) к двум числам 5410 (dec) и 567 (dec).
 

pvvx

Активный участник сообщества
А мне не это нужно :( Как разложить число в пакете я разберусь, там в принципе ничего заумного. Мне нужно понять, как они преобразовывают серийный номер 21021839 (dec) к двум числам 5410 (dec) и 567 (dec).
А это неизвестно - что угодно может быть :) Может его ХОR с чем-то
А буфер примерно так:
C:
    unit8_t inpbuf[5];
    unit8_t *p = inpbuf;
    unit16_t x;
    unit16_t hhdlc, lhdlc, cladr;
    hhdlc = ((*p++)>>1)<<7;
    hhdlc |= (*p++)>>1;
    lhdlc = ((*p++)>>1)<<7;
    lhdlc |= (*p++)>>1;
    cladr = (*p)>>1;
 

Slacky

Member
А это неизвестно - что угодно может быть :) Может его ХОR с чем-то
А буфер примерно так:
C:
    unit8_t inpbuf[5];
    unit8_t *p = inpbuf;
    unit16_t x;
    unit16_t hhdlc, lhdlc, cladr;
    hhdlc = ((*p++)>>1)<<7;
    hhdlc |= (*p++)>>1;
    lhdlc = ((*p++)>>1)<<7;
    lhdlc |= (*p++)>>1;
    cladr = (*p)>>1;
Ну и хрен с ним. Хотел все по феншую, будет как обычно :))

Со счетчиком можно спокойно связаться, если указать логический адрес 1, а физический 16. В пакете это выглядит, как два баайта 0x0221
 

pvvx

Активный участник сообщества
Есть же какая-то программа - в disasm её...
Если свернута чем - вынуть работающую из памяти.
 

pvvx

Активный участник сообщества
Этот ZigBee TS0201 имеет странную прошивку - два куска:
Один с 0x00000..0x6A00 и второй с 0x08000..0x3cba0.
Первый кусок не подписан CRC, второй - подписан.
Жрет много - предварительный замер - более 0.1 мА
 

pvvx

Активный участник сообщества
Отнес я этот Tuya ZigBee в сарай и всё – никто его не видит.
В общем, грохнул эту Tuya прошивку, т.к. это очередной ZigBee, который по дальности, стабильности и длительным паузам между передачами всегда хуже WiFi, а WiFi хуже BLE.
Прошил BLE c LongRange – сразу полет нормальный – все его видят, да жрет в LR менее 20 мкА.
Могу кинуть прошивку…
1697596897982.png
Датчик в этом чуде - CHT8305.

---
Вот напоминание из https://www.bluetooth.com/blog/wire...s-for-iot-applications-technology-comparison/
 

pvvx

Активный участник сообщества
Flash в TLSR825x у Tuya закрыта на запись. Снимается программатором.
Остальные данные по ZigBee TS0201:

Разъем:
1 RST
2 SWS
3 vdd
4 gnd
5 B1 (TX)
6 B7 (RX)

Что и куда:
C3 - I2C_SCK
C2 - I2C_SDA
C0 - key (gnd)
B4 - LED (gnd)
D7 - Alert (CHT8305)

Кнопку использую для соединения в Legacy режиме, т.к. эксплореры ещё не научились искать BLE в Long Rnage режиме....
 

pvvx

Активный участник сообщества
Требуется помощь зала:
Странные показания влажности с датчика CHT8305:
1697694165325.png
Непонятные прыжки на 0.3%. Или это интеграция BTHome в HA балдит?

Опрос датчика производится раз в пару секунд.
C:
_attribute_ram_code_ __attribute__((optimize("-Os"))) int read_sensor_cb(void) {
    uint32_t _temp, i = 10;
    uint8_t reg_data[4];
    if (sensor_i2c_addr != 0) {
        while(i--) {
            if (read_i2c_bytes(sensor_i2c_addr, reg_data, sizeof(reg_data)) == 0) {
                _temp = (reg_data[0] << 8) | reg_data[1];
                measured_data.temp = ((uint32_t)(_temp * 16500) >> 16) - 4000 + cfg.temp_offset * 10; // x 0.01 C
                _temp = (reg_data[2] << 8) | reg_data[3];
                measured_data.humi = ((uint32_t)(_temp * 10000) >> 16) + cfg.humi_offset * 10; // x 0.01 %
                if (measured_data.humi < 0) measured_data.humi = 0;
                else if (measured_data.humi > 9999) measured_data.humi = 9999;
                send_i2c_byte(sensor_i2c_addr, CHT8305_REG_TMP); // start measure T/H
                return 1;
            }
        }
    }
    return 0;
}
Инициализация датчика дает в его регистре Config 0x1000, что согласуется с имеющейся "preliminary" документацией...
У писателей для дурины метод опроса датчика примерно такой-же (пишут "EXPERIMENTAL minimal tested"), но пауза до чтения результата меньше.

PS: Испытал на работу в морозильнике типового холодильника (железный кожух). В режиме LongRange термометр от туда передает и данные принимаются нормально - экранирование кожухом холодильника не мешает.
 

pvvx

Активный участник сообщества
Время реакции на изменение температуры c +10 до -20С у TS0201:
1697696190737.png
Примерно 1 градус С в минуту...
А влажность реагирует быстрее.
П.плата и прочие детальки в TS0201 слишком массивные и прогрев или охлаждение занимают много времени.
 

pvvx

Активный участник сообщества
Слепил чтение идентификаторов в SerialNumberString и оказалось, что в TS0201 стоит flash GD25LQ80C (1Мбайт) :unsure:

BLE SerialNumberString: 556202-C86014-AP3A181

556202 - SoC ID, ver:
  • 5562 - SoC ID: TLSR8258, все TLSR825x
  • 02 - SoC revision: ver 2, все TLSR825x

C86014 - Flash JEDEC, ответ Flash на команду 0x9f:
  • C8 - производитель: GD
  • 6014 - тип Flash: GD25LQ80C
AP3A181 - Flash UID (серийный номер Flash в OTP)
 

pvvx

Активный участник сообщества
Zigbee прошивка для Xiaomi LYWSD03MMC почти готова (включена в TelinkMiFlasher.html). Скоро наверно будет на все варианты термометров...
И кое-как слепилось подобие Zigbee-Direct, но упрощенный, под лозунгом "долой монстров z2m и ZHA", и передающий данные от Zigbee устройств в BLE рекламу (такого нет в Zigbee-Direct) - Zigbee2BLE. Пока в тестовом исполнении...
Первые опыты показывают, что принимается большее кол-во точек замеров от датчиков, чем во всяких ZHA.
Причина не выяснена - тормозит ZHA?
 

shaman1010

Member
Zigbee прошивка для Xiaomi LYWSD03MMC почти готова (включена в TelinkMiFlasher.html).
Прошил на прошлой неделе 3001-0102 с TelinkMiFlasher.html. Уже появились обновления.
Как обновить по ОТА?
По zigbee при попытке обновления НА говорит " No image available for imageType `522` "
По BLE девайс не появляется.
 

pvvx

Активный участник сообщества
По zigbee при попытке обновления НА говорит " No image available for imageType `522` "
А от куда он возьмет файл для прошивки?
Я не публиковал и не буду в общие списки эти прошивки, пока они в Beta стадии.
Качайте файл вручную и кидайте в каталог обновлений Zigbee.

Не знаю и не хочу z2m, но в ZHA всё обновляется путем закидывания файла прошивки в каталог обновлений.
Если какие-то сложности, то берутся все файлы из zigbee_ota to ble и термометр перешивается обратно в BLE. Далее опять накатываете любую версию Zigbee, хоть со всеми новыми идентификаторами.
Одна проблема - после прошивки zigbee в ble, стереть файлы fw и перезагрузить HA. Иначе он опять обновит всё что угодно в BLE, т.к. помнит прошивки где-то до полного перезапуска :)

Так же нет проблем с OTA в Telink zgc_tool работающей с прошивкой координатора (всё в tl_zigbee_sdk на оф. сайте Telink)
 

pvvx

Активный участник сообщества
Zigbee - это не BLE, а кошмар с кучей разновидностей, толпой проблем у всех и никаких стандартов.... Начинающим в IoT лучше не лезть в Zigbee.
 
Сверху Снизу