Cyble Basic v1.1 — TX verified on-channel with an SDR, meter still never ACKs

Hi — first, thanks for this component. The diagnostics in it are what made the following possible.

I have an Itron AnyQuest Cyble Basic v1.1 (label 14-0710608-085, 07/2014, 433 MHz) that has never once responded. Along the way I found something that I think is worth sharing regardless of whether my meter ever works, because it will silently break anyone else with a similar module.

My CC1101 was transmitting 45 kHz off-channel — and nothing reported it

The SPI self-test passes. radio_connected is true. frequency_offset sits at 0.000 kHz. Everything looks healthy. But the module was actually transmitting nowhere near the RADIAN channel.

I measured the real output with an RTL-SDR (rtl_power, 5 kHz bins, 1 s integration), triggering reads from Home Assistant at irregular intervals so I could correlate bursts with button presses:

Configured Measured Deviation Error
417.7526 MHz 417.710 MHz −42.6 kHz −102.0 ppm
433.8200 MHz 433.772 MHz −45.0 kHz −103.7 ppm

Identical relative error in both — a systematic crystal error, roughly ten times worse than a decent 26 MHz part.

Setting frequency: 433.8650 puts the measured output back on 433.820 MHz. Confirmed afterwards: all six button presses produced a burst 3–4 s later, peak +10.9 dB over a −28 dB noise floor, with the two 2-FSK tones clearly visible.

Practical takeaway for anyone stuck: don’t assume your radio is transmitting where you told it to. rtl_power plus a few timed button presses is a five-minute check and it turns “maybe it’s the antenna, maybe it’s the wiring, maybe it’s the meter” into a measurement.

An important false lead on the way: rtl_433 never saw the transmission at all, which nearly convinced me the CC1101 was dead. It is a packet decoder — it does not know RADIAN and stays silent even when the signal is 39 dB above noise. Only a spectrum view (rtl_power or SDR#) tells you whether energy is actually leaving the antenna.

The meter still doesn’t answer

With the radio now measurably correct, the debug trace is clean right up to the point where the meter should reply:

[METER] Transmitting wake-up + interrogation (Year=14, Serial=710608)...
[CC1101] Wake-up burst sent; TX FIFO drained (normal end of transmit)
[METER] Wake-up/interrogation transmitted in 2090ms (MARCSTATE=0x16)
[METER] Waiting for ACK frame (18-byte frame, 150ms timeout)...
[RX] No sync detected before timeout
[METER] No ACK frame received

The RX path demonstrably works — in one attempt GDO0 triggered and First sync pattern received did fire, on noise at RSSI −98 dBm. So the interrupt and sync detection are functional; there is simply never a reply.

Eliminated so far: frequency (measured, not assumed), transmitter (SDR-verified), receiver (sync detection proven), distance (the CC1101 now sits physically on the meter), both candidate years (14 from the module label and 21 from the meter body MID mark — retested after the frequency fix, since the earlier tests were invalid), two independent CC1101 modules, and the listening window (automated attempts every 30 min, 06:00–18:00, weekdays and weekends). 123 attempts, 0 successes.

The question

The README lists AnyQuest Cyble Basic under “may also work (untested)”, while the firmware is developed against the Enhanced. Mine is a Basic.

  • Has anyone here actually got a Basic module to respond?
  • Are the device-type / function-code bytes in the interrogation frame fixed in the current implementation? If it’s a small candidate set, I’m happy to brute-force it — the rig is permanently installed, remotely accessible, and I can automate attempts across the full listening window.

Full write-up with logs and the required diagnostic fields is in issue #156. Happy to flash any experimental branch and report back with SDR traces.