Use your Raspberry Pi to control 433 MHz RC power sockets. Inspired by RC-Switch for Arduino.
PiSwitch is also available as an npm
package.
I'm not able to test all code types, so if you encounter a problem, let me know. Issues and PRs welcome.
- compatibility with RC-Switch, i.e., supports the same devices
- code input in binary, tristate, and the following schemes:
- 10 DIP switches (matching the regular expression
/^[01]{10}$/
) - two (often rotary) switches with 4 positions (
/^[1-4]{2}$/
) - Intertechno (
/^[a-p][1-4]{2}$/
) - REV (
/^[a-d][123]$/
)
- 10 DIP switches (matching the regular expression
- easily extendable translation procedure with JSON dictionary
Attach your 433 MHz transmitter to VCC, GND, and a pin of your liking.
-
Run
npm install
in the project directory to install PiSwitch’s dependencies. -
Choose between running as PiSwitch with
root
privileges or using the WiringPigpio
utility toexport
the GPIO pins, making them accessible to non-root users.(This is precisely the choice you have to make when using Wiring Pi’s setup methods, because that is what’s used.)
Running as an unprivileged user is recommended and the default, so please have a look at the
gpio
util’s documentation. The relevant command isgpio export <pin> out
(BCM numbering). (Take a look atgpio readall
and Gadgetoid’s Pi pinout chart for pin numbers, both are really handy.)If you would rather run as root, pass
mode: 'gpio'
during setup (see below). -
Now take a look at
example.js
. Note:-
setup()
must be called to initialize WiringPi. You'll probably want to to pass key–value option pairs (e.g.,{ pulseLength: 350, pin: 27 }
) that match your setup. Seeconfig.js
. -
send(code, type, off)
is used to transmit an RC code, wherecode
matches one of the input schemes, e.g.,'ff0f00fffff0'
or'a3'
type
is one of {'binary'
,'tristate'
,'dip'
,'rotary'
,'intertechno'
,'rev'
} (default:'binary'
)off
istrue
to send anoff
code (default:false
, i.e., switch on)
Some examples:
send('b2', 'rev')
turns on the "B2" power socket of a system using REV namingsend('b2', 'rev', true)
turns off the same socketsend('010100010000010101010101')
,send('ff0f00ffffff', 'tristate')
, andsend('0010110000', 'dip')
are all translated to the same transmission
-
If you have questions or run into problems, please file an issue. :)