diff options
Diffstat (limited to '_log/fpm-door-lock-rf.md')
| -rw-r--r-- | _log/fpm-door-lock-rf.md | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/_log/fpm-door-lock-rf.md b/_log/fpm-door-lock-rf.md index 87dc6b4..97779db 100644 --- a/_log/fpm-door-lock-rf.md +++ b/_log/fpm-door-lock-rf.md @@ -16,21 +16,54 @@ Unreliable--constant packet loss. the letter, audited code many times, cross-checked with RadioHead and RFM69 open-source drivers. No luck. -Datasheet riddled with ambiguity. - ATmega328P runs at 5V; RFM69 3.3V. Suspect logic-level converter (LLC) issues. High resistance. Not enough swing. -2025-04: Ditched RFM69s. Switched to NRF24L01+ modules-- data pins 5V tolerant, -no LLC required. Spent six weekends writing driver from scratch--clean-room. -Works like a charm. +2025-04: Ditched RFM69s. Switched to NRF24L01+ modules--data pins 5V tolerant, +no LLC required. Spent six weekends writing a clean-room driver from scratch. +Works like a charm. + +Basic security via xor cipher–good enough for a door behind a guard post and +gate: + +``` +void xor(const char *k, const char *s, char *d, uint8_t n) +{ + int i; + for (i = 0; i < n; i++) + d[i] = s[i] ^ k[i]; +} +``` + +Resists replay attacks by cycling the key: + +``` +static inline void keygen(char *buf, uint8_t n) +{ + int i, imax; + uint8_t sreg; + uint16_t seed; + + sreg = SREG; + cli(); + seed = TCNT1; + SREG = sreg; + + for (i = 0, imax = n - 1; i < imax; i++, seed++) + buf[i] = tab[(seed % tablen)]; + buf[imax] = '\0'; +} +``` + +Protocol: FPM sends SYN. Servo responds with session key. Both xor-ed with +static key. Session key used thereafter. Private command set authenticates +endpoints. 2025-05: Wrote FPM drivers for R503 and FPM10A. UART RX sequence was tricky--adopted Adafruit C++ FOSS implementation to C. R503 has built-in LEDs and better form factor. Chose it for the lock. -2025-06: Two PCB boards for FPM (front) and servo (back) controllers. Encrypted -RF link between them. +2025-06: Two PCBs for FPM (front) and servo (back) controllers. <table style="border: none; width: 100%"> <tr style="border: none;"> @@ -68,7 +101,9 @@ Servo inrush current exceeds 1A. 0.3mm tracks cuts it too close. Verdict: Functional but not practical. Battery dead in under 24 hours. Led to [redesign](../fpm-door-lock-lp/) with proper power management. -Commit: -[f4b0b73](https://git.asciimx.com/smart-home/commit/?id=f4b0b734a595919cf451ab9448b06274c8e609a4) -| Gerber: [gerber_back.zip](gerber_back.zip), +Commit: <a +href="https://git.asciimx.com/smart-home/commit/?id=f4b0b734a595919cf451ab9448b06274c8e609a4" +class="external" target="_blank" rel="noopener noreferrer">f4b0b73</a> | +Gerber: [gerber_back.zip](gerber_back.zip), [gerber_front.zip](gerber_front.zip) + |
