Skip to content

tienviitta/insteonrf

 
 

Repository files navigation

Tools for Insteon's RF protocol


This code is meant as a proof of concept for the encoding and decoding of the Insteon RF protocol

For Protocol Information see Doc/pkt_format.txt

Cracking the CRC : Reverse-Engineering a CRC


Hardware

The Hardware used here can be rtlsdr style dongles or hack-rf, or any device streaming 8bit Inphase Quadrature data

There is also support for using the cc1111emk868 usb donngle with rfcat


Data Format

Raw data files are either signed or unsigned 8 bit IQ Inphase Quadrature data Intermediate data is exchanged as ASCII strings of "1" and "0" with packets broken up with newlines, empty and lines starting with '#' are ignored or treated as meta data.

Thus removing any problems with bit or byte order as well as bit or word alignment.

( This is modeled after Jef Poskanzer's NetPBM data transfer solution )


Files

fsk2_demod          a generic FCK2 demodulator 
fsk2_mod            a generic FCK2 modulator  (BROKEN)

rf_clip             reads IQ input and breaks data into packets with super lame squelch algorithm
print_pkt.py        reads ASCII binary decodes Insteon packet
split_pkt.py        Verbose Diag tool for looking at packet I/O

send_comm.py        generates Insteon packet in ASCII binary

rf_send.py	        transmits data with Rfcat input ASCII binary
hackrf_xmit.sh      script to transmit with hack-rf

rf_reciv.py	        receive data and demodulate with Rfcat ( outputs ASCII binary )
rtl_reciv.sh        receive data with rtl-sdr dongle ( output unsigned 8 bit )
hackrf_reciv.sh     receive data with hackrf ( output signed 8 bit )**  
** hackrf_reciv requires mod hackrf_transfer to write to stdout 

python libs (work in progress ) :

insteon_cmds.py Lookup table for insteon commands manchester.py many different manchster encoding funtions parse_rf.py functions to parse ascii IO streams
gen_packet.py generate or process packets

S/plot*.png plots of FSK demod


External Libs

liquid-dsp is needed for fsk2_mod


Example use

Assuming you successfully compiled the demodulator

./fsk2_demod -U < Dat/41802513110D2711018C00.dat  | ./print_pkt.py

should print :

41 : 80 25 13 : 11 0D 27 : 11 01 8C 00           crc 8C

Receive

./rtl_reciv.sh | ./fsk2_demod | ./print_pkt.py

./rf_reciv.py | ./print_pkt.py

./hackrf_reciv.sh | ./fsk2_demod | ./print_pkt.py
( requires mod to hackrf_transfer to write to stdout )

Transmit

./send_comm.py -r 07 : E5 3F 16 : 80 25 13 : 11 BF 13 00 00 AA | ./fsk2_mod | ./hackrf_xmit.sh

./send_comm.py -r 07 : E5 3F 16 : 80 25 13 : 11 BF 13 00 00 AA | ./rf_send.py

./send_comm.py -d 163FE5 -s 132580 13 00 | ./rf_send.py

[Analytics]

About

Tools for Insteon RF

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 85.2%
  • C 12.5%
  • Shell 1.3%
  • Makefile 1.0%