433 MHz pulses are detected by a hardware receiver connected to various different ports (GPIO, USB, …).
a) On the pilight website, there is a list of proven receivers to work well. Typically those receivers have an Automatic Gain Control (AGC) feature. In the absence of RF (Radio Frequencey) signals from real devices the AGC causes the receiver to pick up a lot of noise, in an attempt to detect weak RF signals. As pilight covers a wide range of different devices and data patterns this is causing a lot of disturances and problems, the Low-Pass-Filter (LPF) attempts to address those disturbances, in order to reduce main CPU time.
b) All incoming data is converted into digital pulse transistions (ON to OFF, OFF to ON)
The duration between two transitions is measured in µs and called a pulse.
a) pilight-raw is reporting the duration of all incoming pulses.
b) pilight-debug is analysing all incoming data for known signatures, e.q.:
- pulses with known long durations (e.q. several 1000 µs long), those pulses are called HEADER and FOOTER,
- pulses with known short durations (e.q. durations in the range of 120 to 5000 µs), those pulses represent a logical bit state
- a known fixed number of pulses forming a repetitive sequence of pulses; we call such a repetitive sequence of pulses a PULSETRAIN
c) pilight-receive is reporting all successfully validated incoming PULSETRAINS, using protocol modules, e.q.: the data structure is known
d) pilight-send is used for transmitting known PULSETRAINS to a device (not available for all protocols)
a) If pilight-receive does not recognize the device, e.q. pilight-receive remains silent:
- a new protocol module needs to be developed
b) the data reported by pilight-receive will not work when using pilight-send:
- the existing protocol module needs to be modified.
To fully benefit from pilight
, you should build a low-pass filter to make sure that (any) noise from the receiver isn't communicated to the Raspberry Pi. This filter consists of a microprocessor with a small amount of logic that pre-filters all signals before it enters pilight.
Those who are not using a low-pass filter are advised to use pilight with the kernel module. You can check the hardware settings page on how to configure pilight to use one of these hardware interfaces. The source of this new low-pass filter can soon be found online.
If you are wiring up the transmitter and receiver as shown, the transmitter is using GPIO0 and the receiver is using GPIO1. These pins correspond respectively with physical header pins 11 and 12 on the Raspberry Pi. In the numbering scheme of http://www.wiringx.org, the pin numbers are 0 for the transmitter (the smaller device) and 1 for the receiver (the larger device).
The default pilight configuration file (/etc/pilight/settings.json) assumes the above shown wiring scheme. If you follow this, you don't have to change the configuration, which is by default as follows:
"hardware": { "433gpio": { "sender": 0, "receiver": 1 } }
If you use other header pins, you need to change the configuration file in accordance with the wiringX numbering scheme. Details about this can be found here: http://www.wiringx.org/
Different types of encoders/decoders are use to handle RF data transmission. While some chips encode data using a simple ZERO / ONE binary pattern, others use a Tri-State protocol.
For supported devices pilight is generating from the configuration data the proper pulse stream.
Simple protocols do not encode the payload, some protocols encode the payload statically (same data same encoding), while more sophisticated encoders do use a rolling code scheme (each transmission uses a different encoding).
Most protocols share some basic characteristics, e.q. number of pulses, but use different durations for the pulses, or encode tri-state signals differently.
The duration of the pulses varies with the oscillator setting of the device. The total number of pulses and the ratio between the length of the footer pulse and the address/data pulses gives some indication of the protocol used.
The following mnemonic is used:
3 Cycles High Pulse and 1 Cycle Low pulse: ###. or #(3).(1)
Example: EV1572 encoder: with a 350µS pulse
PRE-AMBLE - 20 Addr bits - 4 Data Bits
PRE-AMBLE: #…………………………. (350, 10850)
Logical 0: #…#… (350, 1050, 350, 1050)
Logical 1: ###.###. (1050, 350, 1050 350)
Logical F: .###…# (350, 1050, 1050, 350)
Other common waveforms of other encoders are:
Pre-Amble: #……….
Logical 0: #..
Logical 1: ..#
Pre-Amble: #(30).(71)
Logical 0: ####………..
Logical 1: #########……
Pre-Amble: #……
Logical 0: #…
Logical 1: …#
Pre-Amble: ######…………..
Logical 0: #..
Logical 1: ..#