Slacky
Member
Я не правильно искал. По tlsr8266 не находит ...Странно... Их тьма: https://aliexpress.ru/wholesale?SearchText=JDY-10
JDY-10 / JDY-10M - всё едино, прошивка разная...
Я не правильно искал. По tlsr8266 не находит ...Странно... Их тьма: https://aliexpress.ru/wholesale?SearchText=JDY-10
JDY-10 / JDY-10M - всё едино, прошивка разная...
Не знаю, я не изучал конкурент модэ sdk. Мне для моих хотелок вполне одного Zigbee хватает ...Что там с Zigbee Direct?
На сайте Telink:
Zigbee Direct — это новая функция Zigbee, которая упрощает подключение и управление устройствами Zigbee непосредственно через устройства Bluetooth Low Energy. Виртуальное устройство Zigbee (например, телефон или концентратор) устанавливает безопасное соединение с устройством Zigbee Direct (например, лампочкой Zigbee). Связь между этими двумя устройствами осуществляется исключительно через Bluetooth Low Energy. По этому каналу связи передаются сообщения Zigbee NWK и приложения. Как только соединение между ZVD и ZDD установлено, ZVD может отправлять команды на ZDD и другие устройства Zigbee в той же сети (где ZDD выступает в качестве прокси).
И где свиснуть программу "ZigBee Direct Test Tool", показанную в видео Telink?
Это ZigBee Direct , а не "конкурент модэ sdk".Не знаю, я не изучал конкурент модэ sdk. Мне для моих хотелок вполне одного Zigbee хватает ...
Я просто прошел по Вашей ссылке, увидел что предлагается для 8258 - Zigbee 3.0 + Bluetooth® 5.0 Concurrent Mode. Дальше не листал. А сейчас пролистал, там Zigbee Direct вроде только для TLSR921x ...Это ZigBee Direct , а не "конкурент модэ sdk".
Для "одного Zigbee" ставить целый zigbee2mqtt с древнейшими адаптерами?
Watermeter Zigbee Telink TLSR8258 (E-BYTE E180-Z5812SP)
Watermeter ZigBee TLSR8258slacky1965.github.io
Не очень понял, точнее вообще не понялsn = 5410 -> 0x1522
x = (sn & 0x3000)<< 30;
x |=(sn & 0x0f00)<< 26;
x |=((sn & 0x0080)<< 25) + ((sn & 0x0070)<< 21) ;
x |=((sn & 0x000f)<< 17);
uint16_t sn = 0x1522;
uint32_t x = (sn & 0x3000)<< 30;
x |=(sn & 0x0f00)<< 26;
x |=((sn & 0x0080)<< 25) + ((sn & 0x0070)<< 21) ;
x |=((sn & 0x000f)<< 17);
printf("x: %d, x: 0x%x\r\n", x, x);
x: 67371008, x: 0x4040000
unit16_t code_sn(uint16_t sn) {
return = ((sn & 0x300) << (14-8)) | ((sn & 0x0f0) << (10-4)) | ((sn & 0x080) << (9-4)) | ((sn & 0x070) << (5-4)) | ((sn & 0x00f) << 1);
}
unit8_t outbuf[5];
unit8_t *p = outbuf;
unit16_t x;
x = code_sn(0x1234);
*p = (unit8_t)(x >> 8);
p++;
*p = (unit8_t)x;
p++;
x = code_sn(0x3ff);
*p = (unit8_t)(x >> 8);
p++;
*p = (unit8_t)x | 1;
p++;
*p = (unit8_t) code_sn(0x3a) | 1;
Мне кажется, мы про разное говорим. Мне нужно понять, как из 21021839 получаются два числа 5410 и 567. А как 5410 и 567 разлождить побитно в пакете я уж соображу )Словами это будет (примерно) так:
Имеем код sn в 14 бит
Берем старший бит кода и кладем в буфер.
Сдигаем буфер влево.
Сдвигаем код влево.
Повторяем: Берем старший бит кода и кладем в буфер.
И так по 7 бит кода. На 8-ой раз вставляем в буфер бит 0, а по концу 14 бит кода вставляем бит 1.
Есть серийный номер у прибора - 21021839 (и я так понимаю, он на разных экземлярах разный). И есть пакет с закодированными адресами. Из номера 21021839 в пакете получается кодированный 4 байтный фрагмент 0x5444086f, если штатной программе указать связываться по серийнику.Т.е. обратная задача?
Всё уточняйте, т.к. пишу занимаясь другими делами и голова на 3-ю задачу работает кое-как
На да, это HDLC. Про "индейцев" не понял ...21021839=0x140C48F ?
Это только HDLC из двух номеров?
С каким "индейцем" (BYTE_ORDER = LITTLE_ENDIAN ? BIG_ENDIAN)?
unit16_t decode_sn(uint16_t s) {
int i = 7;
uint16_t x = 0;
while(i--) {
x |= s & 0x8000;
x >>= 1;
s <<= 1;
}
s <<= 1;
i = 7;
while(i--) {
x |= s & 0x8000;
x >>= 1;
s <<= 1;
}
x >>= 1;
return x;
}
unit8_t inpbuf[5];
unit8_t *p = inpbuf;
unit16_t x;
unit16_t hhdlc, lhdlc, cladr;
x = (*p++) << 8;
x += *p++;
hhdlc = decode_sn(x);
x = (*p++) << 8;
x += *p++;
lhdlc = decode_sn(x);
cladr = decode_sn(*p);