Eric, thanks for the data format!
I wrote a decoder for the device and it works despite the undesirability of increasing the buffers.
As I understand it, now the whole message, together with the preamble, should be placed on one row. Rows splitting occurs only for multi-packet messages with pause. And in our case there is no pause and if the buffer size is insufficient then useful data will be discarded.
Moreover, both the bit buffer and the pulse array are located in local variables (on the stack), and the second one requires a larger size:
char row_bytes [BITBUF_COLS * 2 + 1]; - 4097 bytes
int symbol [PD_MAX_PULSES * 2 + 1] = {0}; - 144004 bytes
It is necessary to create an algorithm for detecting and skipping a large preamble. But now decoder may be used by increasing the buffers.
And I will supplement the description of the data format:
Total packet length 14563 bits:
Preamble: aa aa aa ... aa aa (14400 on-off sync bits)
Sync Word (16 bits): 2DD4
Data (147 bits):
Byte Sample Comment
0-2 D3910F Always the same across devices, a device type?
3 00 00 - normal work , 40 - unlink sensor (button pressed 5s), 80 - battery replaced
4 01 Changes from 1 to 2 if external sensor present
5-6 0301 Unknown (also seen 0201), sw version?
7 58 Battery % 0-100
8-9 A221 Device id, always the same for a sensor but each sensor is different
10-11 D600 Temperature in °C * 10, little endian, so 0xD200 is 210, 21.0°C or 69.8°F
12-13 F400 Temperature °C * 10 for the external sensor, 0x1405 if not connected
14-15 D301 Relative humidity % * 10, little endian, so 0xC501 is 453 or 45.3%
16-17 38FB CRC16
18 0 Unknown 3 bits (seen 0 and 2)
CRC16 (bytes 0-15), without sync word):
poly=0x8005 init=0x2f61 refin=true refout=true xorout=0x0000 check=0x3583 residue=0x0000