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