:merged production code with code on github
parent
7643aa2a64
commit
9c40e21619
|
@ -1 +1,2 @@
|
|||
twittertokens.php
|
||||
spaceapikey.txt
|
|
@ -0,0 +1,9 @@
|
|||
all: send
|
||||
|
||||
send: RCSwitch.o send.o
|
||||
$(CXX) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi
|
||||
|
||||
rawsend: RCSwitch.o rawsend.o
|
||||
$(CXX) $(CXXFLAGS) $(LDFLAGS) $+ -o $@ -lwiringPi
|
||||
clean:
|
||||
$(RM) *.o send rawsend
|
|
@ -0,0 +1,583 @@
|
|||
/*
|
||||
RCSwitch - Arduino libary for remote control outlet switches
|
||||
Copyright (c) 2011 Suat Özgür. All right reserved.
|
||||
|
||||
Contributors:
|
||||
- Andre Koehler / info(at)tomate-online(dot)de
|
||||
- Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com
|
||||
- Skineffect / http://forum.ardumote.com/viewtopic.php?f=2&t=48
|
||||
|
||||
Project home: http://code.google.com/p/rc-switch/
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "RCSwitch.h"
|
||||
|
||||
unsigned long RCSwitch::nReceivedValue = NULL;
|
||||
unsigned int RCSwitch::nReceivedBitlength = 0;
|
||||
unsigned int RCSwitch::nReceivedDelay = 0;
|
||||
unsigned int RCSwitch::nReceivedProtocol = 0;
|
||||
unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES];
|
||||
int RCSwitch::nReceiveTolerance = 60;
|
||||
|
||||
RCSwitch::RCSwitch() {
|
||||
this->nReceiverInterrupt = -1;
|
||||
this->nTransmitterPin = -1;
|
||||
RCSwitch::nReceivedValue = NULL;
|
||||
this->setPulseLength(350);
|
||||
this->setRepeatTransmit(10);
|
||||
this->setReceiveTolerance(60);
|
||||
this->setProtocol(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the protocol to send.
|
||||
*/
|
||||
void RCSwitch::setProtocol(int nProtocol) {
|
||||
this->nProtocol = nProtocol;
|
||||
if (nProtocol == 1){
|
||||
this->setPulseLength(350);
|
||||
}
|
||||
else if (nProtocol == 2) {
|
||||
this->setPulseLength(650);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the protocol to send with pulse length in microseconds.
|
||||
*/
|
||||
void RCSwitch::setProtocol(int nProtocol, int nPulseLength) {
|
||||
this->nProtocol = nProtocol;
|
||||
if (nProtocol == 1){
|
||||
this->setPulseLength(nPulseLength);
|
||||
}
|
||||
else if (nProtocol == 2) {
|
||||
this->setPulseLength(nPulseLength);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets pulse length in microseconds
|
||||
*/
|
||||
void RCSwitch::setPulseLength(int nPulseLength) {
|
||||
this->nPulseLength = nPulseLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Repeat Transmits
|
||||
*/
|
||||
void RCSwitch::setRepeatTransmit(int nRepeatTransmit) {
|
||||
this->nRepeatTransmit = nRepeatTransmit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Receiving Tolerance
|
||||
*/
|
||||
void RCSwitch::setReceiveTolerance(int nPercent) {
|
||||
RCSwitch::nReceiveTolerance = nPercent;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Enable transmissions
|
||||
*
|
||||
* @param nTransmitterPin Arduino Pin to which the sender is connected to
|
||||
*/
|
||||
void RCSwitch::enableTransmit(int nTransmitterPin) {
|
||||
this->nTransmitterPin = nTransmitterPin;
|
||||
pinMode(this->nTransmitterPin, OUTPUT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable transmissions
|
||||
*/
|
||||
void RCSwitch::disableTransmit() {
|
||||
this->nTransmitterPin = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch a remote switch on (Type C Intertechno)
|
||||
*
|
||||
* @param sFamily Familycode (a..f)
|
||||
* @param nGroup Number of group (1..4)
|
||||
* @param nDevice Number of device (1..4)
|
||||
*/
|
||||
void RCSwitch::switchOn(char sFamily, int nGroup, int nDevice) {
|
||||
this->sendTriState( this->getCodeWordC(sFamily, nGroup, nDevice, true) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch a remote switch off (Type C Intertechno)
|
||||
*
|
||||
* @param sFamily Familycode (a..f)
|
||||
* @param nGroup Number of group (1..4)
|
||||
* @param nDevice Number of device (1..4)
|
||||
*/
|
||||
void RCSwitch::switchOff(char sFamily, int nGroup, int nDevice) {
|
||||
this->sendTriState( this->getCodeWordC(sFamily, nGroup, nDevice, false) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch a remote switch on (Type B with two rotary/sliding switches)
|
||||
*
|
||||
* @param nAddressCode Number of the switch group (1..4)
|
||||
* @param nChannelCode Number of the switch itself (1..4)
|
||||
*/
|
||||
void RCSwitch::switchOn(int nAddressCode, int nChannelCode) {
|
||||
this->sendTriState( this->getCodeWordB(nAddressCode, nChannelCode, true) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch a remote switch off (Type B with two rotary/sliding switches)
|
||||
*
|
||||
* @param nAddressCode Number of the switch group (1..4)
|
||||
* @param nChannelCode Number of the switch itself (1..4)
|
||||
*/
|
||||
void RCSwitch::switchOff(int nAddressCode, int nChannelCode) {
|
||||
this->sendTriState( this->getCodeWordB(nAddressCode, nChannelCode, false) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch a remote switch on (Type A with 10 pole DIP switches)
|
||||
*
|
||||
* @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111")
|
||||
* @param nChannelCode Number of the switch itself (1..4)
|
||||
*/
|
||||
void RCSwitch::switchOn(char* sGroup, int nChannel) {
|
||||
this->sendTriState( this->getCodeWordA(sGroup, nChannel, true) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch a remote switch off (Type A with 10 pole DIP switches)
|
||||
*
|
||||
* @param sGroup Code of the switch group (refers to DIP switches 1..5 where "1" = on and "0" = off, if all DIP switches are on it's "11111")
|
||||
* @param nChannelCode Number of the switch itself (1..4)
|
||||
*/
|
||||
void RCSwitch::switchOff(char* sGroup, int nChannel) {
|
||||
this->sendTriState( this->getCodeWordA(sGroup, nChannel, false) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a char[13], representing the Code Word to be send.
|
||||
* A Code Word consists of 9 address bits, 3 data bits and one sync bit but in our case only the first 8 address bits and the last 2 data bits were used.
|
||||
* A Code Bit can have 4 different states: "F" (floating), "0" (low), "1" (high), "S" (synchronous bit)
|
||||
*
|
||||
* +-------------------------------+--------------------------------+-----------------------------------------+-----------------------------------------+----------------------+------------+
|
||||
* | 4 bits address (switch group) | 4 bits address (switch number) | 1 bit address (not used, so never mind) | 1 bit address (not used, so never mind) | 2 data bits (on|off) | 1 sync bit |
|
||||
* | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | 1=0FFF 2=F0FF 3=FF0F 4=FFF0 | F | F | on=FF off=F0 | S |
|
||||
* +-------------------------------+--------------------------------+-----------------------------------------+-----------------------------------------+----------------------+------------+
|
||||
*
|
||||
* @param nAddressCode Number of the switch group (1..4)
|
||||
* @param nChannelCode Number of the switch itself (1..4)
|
||||
* @param bStatus Wether to switch on (true) or off (false)
|
||||
*
|
||||
* @return char[13]
|
||||
*/
|
||||
char* RCSwitch::getCodeWordB(int nAddressCode, int nChannelCode, boolean bStatus) {
|
||||
int nReturnPos = 0;
|
||||
static char sReturn[13];
|
||||
|
||||
char* code[5] = { "FFFF", "0FFF", "F0FF", "FF0F", "FFF0" };
|
||||
if (nAddressCode < 1 || nAddressCode > 4 || nChannelCode < 1 || nChannelCode > 4) {
|
||||
return '\0';
|
||||
}
|
||||
for (int i = 0; i<4; i++) {
|
||||
sReturn[nReturnPos++] = code[nAddressCode][i];
|
||||
}
|
||||
|
||||
for (int i = 0; i<4; i++) {
|
||||
sReturn[nReturnPos++] = code[nChannelCode][i];
|
||||
}
|
||||
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
|
||||
if (bStatus) {
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
} else {
|
||||
sReturn[nReturnPos++] = '0';
|
||||
}
|
||||
|
||||
sReturn[nReturnPos] = '\0';
|
||||
|
||||
return sReturn;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Like getCodeWord (Type A)
|
||||
*/
|
||||
char* RCSwitch::getCodeWordA(char* sGroup, int nChannelCode, boolean bStatus) {
|
||||
int nReturnPos = 0;
|
||||
static char sReturn[13];
|
||||
|
||||
char* code[6] = { "FFFFF", "0FFFF", "F0FFF", "FF0FF", "FFF0F", "FFFF0" };
|
||||
|
||||
if (nChannelCode < 1 || nChannelCode > 5) {
|
||||
return '\0';
|
||||
}
|
||||
|
||||
for (int i = 0; i<5; i++) {
|
||||
if (sGroup[i] == '0') {
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
} else if (sGroup[i] == '1') {
|
||||
sReturn[nReturnPos++] = '0';
|
||||
} else {
|
||||
return '\0';
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i<5; i++) {
|
||||
sReturn[nReturnPos++] = code[ nChannelCode ][i];
|
||||
}
|
||||
|
||||
if (bStatus) {
|
||||
sReturn[nReturnPos++] = '0';
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
} else {
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
sReturn[nReturnPos++] = '0';
|
||||
}
|
||||
sReturn[nReturnPos] = '\0';
|
||||
|
||||
return sReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Like getCodeWord (Type C = Intertechno)
|
||||
*/
|
||||
char* RCSwitch::getCodeWordC(char sFamily, int nGroup, int nDevice, boolean bStatus) {
|
||||
static char sReturn[13];
|
||||
int nReturnPos = 0;
|
||||
|
||||
if ( (byte)sFamily < 97 || (byte)sFamily > 112 || nGroup < 1 || nGroup > 4 || nDevice < 1 || nDevice > 4) {
|
||||
return '\0';
|
||||
}
|
||||
|
||||
char* sDeviceGroupCode = dec2binWzerofill( (nDevice-1) + (nGroup-1)*4, 4 );
|
||||
char familycode[16][5] = { "0000", "F000", "0F00", "FF00", "00F0", "F0F0", "0FF0", "FFF0", "000F", "F00F", "0F0F", "FF0F", "00FF", "F0FF", "0FFF", "FFFF" };
|
||||
for (int i = 0; i<4; i++) {
|
||||
sReturn[nReturnPos++] = familycode[ (int)sFamily - 97 ][i];
|
||||
}
|
||||
for (int i = 0; i<4; i++) {
|
||||
sReturn[nReturnPos++] = (sDeviceGroupCode[3-i] == '1' ? 'F' : '0');
|
||||
}
|
||||
sReturn[nReturnPos++] = '0';
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
if (bStatus) {
|
||||
sReturn[nReturnPos++] = 'F';
|
||||
} else {
|
||||
sReturn[nReturnPos++] = '0';
|
||||
}
|
||||
sReturn[nReturnPos] = '\0';
|
||||
return sReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a Code Word
|
||||
* @param sCodeWord /^[10FS]*$/ -> see getCodeWord
|
||||
*/
|
||||
void RCSwitch::sendTriState(char* sCodeWord) {
|
||||
for (int nRepeat=0; nRepeat<nRepeatTransmit; nRepeat++) {
|
||||
int i = 0;
|
||||
while (sCodeWord[i] != '\0') {
|
||||
switch(sCodeWord[i]) {
|
||||
case '0':
|
||||
this->sendT0();
|
||||
break;
|
||||
case 'F':
|
||||
this->sendTF();
|
||||
break;
|
||||
case '1':
|
||||
this->sendT1();
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
this->sendSync();
|
||||
}
|
||||
}
|
||||
|
||||
void RCSwitch::send(unsigned long Code, unsigned int length) {
|
||||
this->send( this->dec2binWzerofill(Code, length) );
|
||||
}
|
||||
|
||||
void RCSwitch::send(char* sCodeWord) {
|
||||
for (int nRepeat=0; nRepeat<nRepeatTransmit; nRepeat++) {
|
||||
int i = 0;
|
||||
while (sCodeWord[i] != '\0') {
|
||||
switch(sCodeWord[i]) {
|
||||
case '0':
|
||||
this->send0();
|
||||
break;
|
||||
case '1':
|
||||
this->send1();
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
this->sendSync();
|
||||
}
|
||||
}
|
||||
|
||||
void RCSwitch::transmit(int nHighPulses, int nLowPulses) {
|
||||
boolean disabled_Receive = false;
|
||||
int nReceiverInterrupt_backup = nReceiverInterrupt;
|
||||
if (this->nTransmitterPin != -1) {
|
||||
if (this->nReceiverInterrupt != -1) {
|
||||
this->disableReceive();
|
||||
disabled_Receive = true;
|
||||
}
|
||||
digitalWrite(this->nTransmitterPin, HIGH);
|
||||
delayMicroseconds( this->nPulseLength * nHighPulses);
|
||||
digitalWrite(this->nTransmitterPin, LOW);
|
||||
delayMicroseconds( this->nPulseLength * nLowPulses);
|
||||
if(disabled_Receive){
|
||||
this->enableReceive(nReceiverInterrupt_backup);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Sends a "0" Bit
|
||||
* _
|
||||
* Waveform Protocol 1: | |___
|
||||
* _
|
||||
* Waveform Protocol 2: | |__
|
||||
*/
|
||||
void RCSwitch::send0() {
|
||||
if (this->nProtocol == 1){
|
||||
this->transmit(1,3);
|
||||
}
|
||||
else if (this->nProtocol == 2) {
|
||||
this->transmit(1,2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a "1" Bit
|
||||
* ___
|
||||
* Waveform Protocol 1: | |_
|
||||
* __
|
||||
* Waveform Protocol 2: | |_
|
||||
*/
|
||||
void RCSwitch::send1() {
|
||||
if (this->nProtocol == 1){
|
||||
this->transmit(3,1);
|
||||
}
|
||||
else if (this->nProtocol == 2) {
|
||||
this->transmit(2,1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sends a Tri-State "0" Bit
|
||||
* _ _
|
||||
* Waveform: | |___| |___
|
||||
*/
|
||||
void RCSwitch::sendT0() {
|
||||
this->transmit(1,3);
|
||||
this->transmit(1,3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a Tri-State "1" Bit
|
||||
* ___ ___
|
||||
* Waveform: | |_| |_
|
||||
*/
|
||||
void RCSwitch::sendT1() {
|
||||
this->transmit(3,1);
|
||||
this->transmit(3,1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a Tri-State "F" Bit
|
||||
* _ ___
|
||||
* Waveform: | |___| |_
|
||||
*/
|
||||
void RCSwitch::sendTF() {
|
||||
this->transmit(1,3);
|
||||
this->transmit(3,1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a "Sync" Bit
|
||||
* _
|
||||
* Waveform Protocol 1: | |_______________________________
|
||||
* _
|
||||
* Waveform Protocol 2: | |__________
|
||||
*/
|
||||
void RCSwitch::sendSync() {
|
||||
|
||||
if (this->nProtocol == 1){
|
||||
this->transmit(1,31);
|
||||
}
|
||||
else if (this->nProtocol == 2) {
|
||||
this->transmit(1,10);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable receiving data
|
||||
*/
|
||||
void RCSwitch::enableReceive(int interrupt) {
|
||||
this->nReceiverInterrupt = interrupt;
|
||||
this->enableReceive();
|
||||
}
|
||||
|
||||
void RCSwitch::enableReceive() {
|
||||
if (this->nReceiverInterrupt != -1) {
|
||||
RCSwitch::nReceivedValue = NULL;
|
||||
RCSwitch::nReceivedBitlength = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable receiving data
|
||||
*/
|
||||
void RCSwitch::disableReceive() {
|
||||
this->nReceiverInterrupt = -1;
|
||||
}
|
||||
|
||||
bool RCSwitch::available() {
|
||||
return RCSwitch::nReceivedValue != NULL;
|
||||
}
|
||||
|
||||
void RCSwitch::resetAvailable() {
|
||||
RCSwitch::nReceivedValue = NULL;
|
||||
}
|
||||
|
||||
unsigned long RCSwitch::getReceivedValue() {
|
||||
return RCSwitch::nReceivedValue;
|
||||
}
|
||||
|
||||
unsigned int RCSwitch::getReceivedBitlength() {
|
||||
return RCSwitch::nReceivedBitlength;
|
||||
}
|
||||
|
||||
unsigned int RCSwitch::getReceivedDelay() {
|
||||
return RCSwitch::nReceivedDelay;
|
||||
}
|
||||
|
||||
unsigned int RCSwitch::getReceivedProtocol() {
|
||||
return RCSwitch::nReceivedProtocol;
|
||||
}
|
||||
|
||||
unsigned int* RCSwitch::getReceivedRawdata() {
|
||||
return RCSwitch::timings;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
bool RCSwitch::receiveProtocol1(unsigned int changeCount){
|
||||
|
||||
unsigned long code = 0;
|
||||
unsigned long delay = RCSwitch::timings[0] / 31;
|
||||
unsigned long delayTolerance = delay * RCSwitch::nReceiveTolerance * 0.01;
|
||||
|
||||
for (int i = 1; i<changeCount ; i=i+2) {
|
||||
|
||||
if (RCSwitch::timings[i] > delay-delayTolerance && RCSwitch::timings[i] < delay+delayTolerance && RCSwitch::timings[i+1] > delay*3-delayTolerance && RCSwitch::timings[i+1] < delay*3+delayTolerance) {
|
||||
code = code << 1;
|
||||
} else if (RCSwitch::timings[i] > delay*3-delayTolerance && RCSwitch::timings[i] < delay*3+delayTolerance && RCSwitch::timings[i+1] > delay-delayTolerance && RCSwitch::timings[i+1] < delay+delayTolerance) {
|
||||
code+=1;
|
||||
code = code << 1;
|
||||
} else {
|
||||
// Failed
|
||||
i = changeCount;
|
||||
code = 0;
|
||||
}
|
||||
}
|
||||
code = code >> 1;
|
||||
if (changeCount > 6) { // ignore < 4bit values as there are no devices sending 4bit values => noise
|
||||
RCSwitch::nReceivedValue = code;
|
||||
RCSwitch::nReceivedBitlength = changeCount / 2;
|
||||
RCSwitch::nReceivedDelay = delay;
|
||||
RCSwitch::nReceivedProtocol = 1;
|
||||
}
|
||||
|
||||
if (code == 0){
|
||||
return false;
|
||||
}else if (code != 0){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool RCSwitch::receiveProtocol2(unsigned int changeCount){
|
||||
|
||||
unsigned long code = 0;
|
||||
unsigned long delay = RCSwitch::timings[0] / 10;
|
||||
unsigned long delayTolerance = delay * RCSwitch::nReceiveTolerance * 0.01;
|
||||
|
||||
for (int i = 1; i<changeCount ; i=i+2) {
|
||||
|
||||
if (RCSwitch::timings[i] > delay-delayTolerance && RCSwitch::timings[i] < delay+delayTolerance && RCSwitch::timings[i+1] > delay*2-delayTolerance && RCSwitch::timings[i+1] < delay*2+delayTolerance) {
|
||||
code = code << 1;
|
||||
} else if (RCSwitch::timings[i] > delay*2-delayTolerance && RCSwitch::timings[i] < delay*2+delayTolerance && RCSwitch::timings[i+1] > delay-delayTolerance && RCSwitch::timings[i+1] < delay+delayTolerance) {
|
||||
code+=1;
|
||||
code = code << 1;
|
||||
} else {
|
||||
// Failed
|
||||
i = changeCount;
|
||||
code = 0;
|
||||
}
|
||||
}
|
||||
code = code >> 1;
|
||||
if (changeCount > 6) { // ignore < 4bit values as there are no devices sending 4bit values => noise
|
||||
RCSwitch::nReceivedValue = code;
|
||||
RCSwitch::nReceivedBitlength = changeCount / 2;
|
||||
RCSwitch::nReceivedDelay = delay;
|
||||
RCSwitch::nReceivedProtocol = 2;
|
||||
}
|
||||
|
||||
if (code == 0){
|
||||
return false;
|
||||
}else if (code != 0){
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns a decimal value to its binary representation
|
||||
*/
|
||||
char* RCSwitch::dec2binWzerofill(unsigned long Dec, unsigned int bitLength){
|
||||
static char bin[64];
|
||||
unsigned int i=0;
|
||||
|
||||
while (Dec > 0) {
|
||||
bin[32+i++] = ((Dec & 1) > 0) ? '1' : '0';
|
||||
Dec = Dec >> 1;
|
||||
}
|
||||
|
||||
for (unsigned int j = 0; j< bitLength; j++) {
|
||||
if (j >= bitLength - i) {
|
||||
bin[j] = bin[ 31 + i - (j - (bitLength - i)) ];
|
||||
}else {
|
||||
bin[j] = '0';
|
||||
}
|
||||
}
|
||||
bin[bitLength] = '\0';
|
||||
|
||||
return bin;
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
RCSwitch - Arduino libary for remote control outlet switches
|
||||
Copyright (c) 2011 Suat Özgür. All right reserved.
|
||||
|
||||
Contributors:
|
||||
- Andre Koehler / info(at)tomate-online(dot)de
|
||||
- Gordeev Andrey Vladimirovich / gordeev(at)openpyro(dot)com
|
||||
|
||||
Project home: http://code.google.com/p/rc-switch/
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#ifndef _RCSwitch_h
|
||||
#define _RCSwitch_h
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
#include "Arduino.h"
|
||||
#else
|
||||
#include <wiringPi.h>
|
||||
#include <stdint.h>
|
||||
#define NULL 0
|
||||
#define CHANGE 1
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
typedef uint8_t boolean;
|
||||
typedef uint8_t byte;
|
||||
|
||||
#if !defined(NULL)
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// Number of maximum High/Low changes per packet.
|
||||
// We can handle up to (unsigned long) => 32 bit * 2 H/L changes per bit + 2 for sync
|
||||
#define RCSWITCH_MAX_CHANGES 67
|
||||
|
||||
|
||||
class RCSwitch {
|
||||
|
||||
public:
|
||||
RCSwitch();
|
||||
|
||||
void switchOn(int nGroupNumber, int nSwitchNumber);
|
||||
void switchOff(int nGroupNumber, int nSwitchNumber);
|
||||
void switchOn(char* sGroup, int nSwitchNumber);
|
||||
void switchOff(char* sGroup, int nSwitchNumber);
|
||||
void switchOn(char sFamily, int nGroup, int nDevice);
|
||||
void switchOff(char sFamily, int nGroup, int nDevice);
|
||||
|
||||
void sendTriState(char* Code);
|
||||
void send(unsigned long Code, unsigned int length);
|
||||
void send(char* Code);
|
||||
|
||||
void enableReceive(int interrupt);
|
||||
void enableReceive();
|
||||
void disableReceive();
|
||||
bool available();
|
||||
void resetAvailable();
|
||||
|
||||
unsigned long getReceivedValue();
|
||||
unsigned int getReceivedBitlength();
|
||||
unsigned int getReceivedDelay();
|
||||
unsigned int getReceivedProtocol();
|
||||
unsigned int* getReceivedRawdata();
|
||||
|
||||
void enableTransmit(int nTransmitterPin);
|
||||
void disableTransmit();
|
||||
void setPulseLength(int nPulseLength);
|
||||
void setRepeatTransmit(int nRepeatTransmit);
|
||||
void setReceiveTolerance(int nPercent);
|
||||
void setProtocol(int nProtocol);
|
||||
void setProtocol(int nProtocol, int nPulseLength);
|
||||
|
||||
private:
|
||||
char* getCodeWordB(int nGroupNumber, int nSwitchNumber, boolean bStatus);
|
||||
char* getCodeWordA(char* sGroup, int nSwitchNumber, boolean bStatus);
|
||||
char* getCodeWordC(char sFamily, int nGroup, int nDevice, boolean bStatus);
|
||||
void sendT0();
|
||||
void sendT1();
|
||||
void sendTF();
|
||||
void send0();
|
||||
void send1();
|
||||
void sendSync();
|
||||
void transmit(int nHighPulses, int nLowPulses);
|
||||
|
||||
static char* dec2binWzerofill(unsigned long dec, unsigned int length);
|
||||
|
||||
static void handleInterrupt();
|
||||
static bool receiveProtocol1(unsigned int changeCount);
|
||||
static bool receiveProtocol2(unsigned int changeCount);
|
||||
int nReceiverInterrupt;
|
||||
int nTransmitterPin;
|
||||
int nPulseLength;
|
||||
int nRepeatTransmit;
|
||||
char nProtocol;
|
||||
|
||||
static int nReceiveTolerance;
|
||||
static unsigned long nReceivedValue;
|
||||
static unsigned int nReceivedBitlength;
|
||||
static unsigned int nReceivedDelay;
|
||||
static unsigned int nReceivedProtocol;
|
||||
static unsigned int timings[RCSWITCH_MAX_CHANGES];
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
Binary file not shown.
|
@ -0,0 +1,14 @@
|
|||
# About
|
||||
|
||||
rcswitch-pi is for controlling rc remote controlled power sockets
|
||||
with the raspberry pi. Kudos to the projects [rc-switch](http://code.google.com/p/rc-switch)
|
||||
and [wiringpi](https://projects.drogon.net/raspberry-pi/wiringpi).
|
||||
I just adapted the rc-switch code to use the wiringpi library instead of
|
||||
the library provided by the arduino.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
First you have to install the [wiringpi](https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/) library.
|
||||
After that you can compile the example program *send* by executing *make*.
|
||||
You may want to changet the used GPIO pin before compilation in the send.cpp source file.
|
|
@ -0,0 +1 @@
|
|||
11111101000110010000100010100010000100000000100000000001001001001110010000000000000000000000000
|
|
@ -0,0 +1,6 @@
|
|||
./send 2 1A 1 1
|
||||
|
||||
off
|
||||
./send 2 1A 1 0
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Usage: ./send <bitlen> <command>
|
||||
bitlen is in microsecond
|
||||
Command is 0 for OFF and 1 for ON
|
||||
*/
|
||||
|
||||
#include "RCSwitch.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
/*
|
||||
output PIN is hardcoded for testing purposes
|
||||
see https://projects.drogon.net/raspberry-pi/wiringpi/pins/
|
||||
for pin mapping of the raspberry pi GPIO connector
|
||||
*/
|
||||
int PIN = 2; // GPIO-PIN 17
|
||||
char pSystemCode[14];
|
||||
int bitlen=atoi(argv[1]);
|
||||
char* sendptr=argv[2];
|
||||
|
||||
if (wiringPiSetup () == -1) return 1;
|
||||
printf("sending with bitlength %d the data %s ...\n", bitlen, argv[2]);
|
||||
RCSwitch mySwitch = RCSwitch();
|
||||
printf("defining transmit PIN[%i] ... ",PIN);
|
||||
mySwitch.enableTransmit(PIN);
|
||||
printf("success\n");
|
||||
|
||||
|
||||
int i=0;
|
||||
while(sendptr[i]!= (char)0)
|
||||
{
|
||||
printf("%c",sendptr[i]);
|
||||
fflush(stdout);
|
||||
if(sendptr[i] == '0')
|
||||
{
|
||||
digitalWrite(PIN, LOW);
|
||||
}
|
||||
if(sendptr[i] == '1')
|
||||
{
|
||||
digitalWrite(PIN, HIGH);
|
||||
}
|
||||
delayMicroseconds( bitlen );
|
||||
i++;
|
||||
}
|
||||
printf("\ndone\n");
|
||||
}
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
Usage: ./send <command>
|
||||
SystemCodeType is 1 for default and 2 for switches with 10 Bits 123456ABCD
|
||||
Command is 0 for OFF and 1 for ON
|
||||
*/
|
||||
|
||||
#include "RCSwitch.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
/*
|
||||
output PIN is hardcoded for testing purposes
|
||||
see https://projects.drogon.net/raspberry-pi/wiringpi/pins/
|
||||
for pin mapping of the raspberry pi GPIO connector
|
||||
*/
|
||||
int PIN = 2; // GPIO-PIN 17
|
||||
int systemCodeType = atoi(argv[1]);
|
||||
int systemCode = atoi(argv[2]);
|
||||
int unitCode = atoi(argv[3]);
|
||||
int command = atoi(argv[4]);
|
||||
char pSystemCode[14];
|
||||
|
||||
if (wiringPiSetup () == -1) return 1;
|
||||
printf("sending systemCodeType[%i] systemCode[%i] unitCode[%i] command[%i] ...\n", systemCodeType, systemCode, unitCode, command);
|
||||
RCSwitch mySwitch = RCSwitch();
|
||||
printf("defining transmit PIN[%i] ... ",PIN);
|
||||
mySwitch.enableTransmit(PIN);
|
||||
printf("success\n");
|
||||
printf("computing system Code Type ...\n");
|
||||
switch(systemCodeType)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
printf("Switching \"default\" system[%i] unit[%i] ... ", systemCode, unitCode);
|
||||
switch(command)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
printf("off\n");
|
||||
mySwitch.switchOff(systemCode, unitCode);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
printf("on\n");
|
||||
mySwitch.switchOn(systemCode, unitCode);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("command[%i] is unsupported\n", command);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
printf("computing systemcode for Intertechno Type B house[%i] unit[%i] ... ",systemCode, unitCode);
|
||||
switch(systemCode)
|
||||
{
|
||||
// house/family code A=1 - P=16
|
||||
case 1: { printf("1/A ... "); strcpy(pSystemCode,"0000"); break; }
|
||||
case 2: { printf("2/B ... "); strcpy(pSystemCode,"F000"); break; }
|
||||
case 3: { printf("3/C ... "); strcpy(pSystemCode,"0F00"); break; }
|
||||
case 4: { printf("4/D ... "); strcpy(pSystemCode,"FF00"); break; }
|
||||
case 5: { printf("5/E ... "); strcpy(pSystemCode,"00F0"); break; }
|
||||
case 6: { printf("6/F ... "); strcpy(pSystemCode,"F0F0"); break; }
|
||||
case 7: { printf("7/G ... "); strcpy(pSystemCode,"0FF0"); break; }
|
||||
case 8: { printf("8/H ... "); strcpy(pSystemCode,"FFF0"); break; }
|
||||
case 9: { printf("9/I ... "); strcpy(pSystemCode,"000F"); break; }
|
||||
case 10: { printf("10/J ... "); strcpy(pSystemCode,"F00F"); break; }
|
||||
case 11: { printf("11/K ... "); strcpy(pSystemCode,"0F0F"); break; }
|
||||
case 12: { printf("12/L ... "); strcpy(pSystemCode,"FF0F"); break; }
|
||||
case 13: { printf("13/M ... "); strcpy(pSystemCode,"00FF"); break; }
|
||||
case 14: { printf("14/N ... "); strcpy(pSystemCode,"F0FF"); break; }
|
||||
case 15: { printf("15/O ... "); strcpy(pSystemCode,"0FFF"); break; }
|
||||
case 16: { printf("16/P ... "); strcpy(pSystemCode,"FFFF"); break; }
|
||||
default:
|
||||
{
|
||||
printf("systemCode[%s] is unsupported\n", systemCode);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
printf("got systemCode\n");
|
||||
switch(unitCode)
|
||||
{
|
||||
// unit/group code 01-16
|
||||
case 1: { printf("1 ... "); strcat(pSystemCode,"0000"); break; }
|
||||
case 2: { printf("2 ... "); strcat(pSystemCode,"F000"); break; }
|
||||
case 3: { printf("3 ... "); strcat(pSystemCode,"0F00"); break; }
|
||||
case 4: { printf("4 ... "); strcat(pSystemCode,"FF00"); break; }
|
||||
case 5: { printf("5 ... "); strcat(pSystemCode,"00F0"); break; }
|
||||
case 6: { printf("6 ... "); strcat(pSystemCode,"F0F0"); break; }
|
||||
case 7: { printf("7 ... "); strcat(pSystemCode,"0FF0"); break; }
|
||||
case 8: { printf("8 ... "); strcat(pSystemCode,"FFF0"); break; }
|
||||
case 9: { printf("9 ... "); strcat(pSystemCode,"000F"); break; }
|
||||
case 10: { printf("10 ... "); strcat(pSystemCode,"F00F"); break; }
|
||||
case 11: { printf("11 ... "); strcat(pSystemCode,"0F0F"); break; }
|
||||
case 12: { printf("12 ... "); strcat(pSystemCode,"FF0F"); break; }
|
||||
case 13: { printf("13 ... "); strcat(pSystemCode,"00FF"); break; }
|
||||
case 14: { printf("14 ... "); strcat(pSystemCode,"F0FF"); break; }
|
||||
case 15: { printf("15 ... "); strcat(pSystemCode,"0FFF"); break; }
|
||||
case 16: { printf("16 ... "); strcat(pSystemCode,"FFFF"); break; }
|
||||
default:
|
||||
{
|
||||
printf("unitCode[%i] is unsupported\n", unitCode);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
strcat(pSystemCode,"0F"); // mandatory bits
|
||||
switch(command)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
strcat(pSystemCode,"F0");
|
||||
mySwitch.sendTriState(pSystemCode);
|
||||
printf("sent TriState signal: pSystemCode[%s]\n",pSystemCode);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
strcat(pSystemCode,"FF");
|
||||
mySwitch.sendTriState(pSystemCode);
|
||||
printf("sent TriState signal: pSystemCode[%s]\n",pSystemCode);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("command[%i] is unsupported\n", command);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("command sequence unknown, aborting!\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Binary file not shown.
|
@ -11,13 +11,16 @@ then
|
|||
logger -t $(basename $0) "switching all lights off"
|
||||
for i in {1..16}
|
||||
do
|
||||
/usr/local/bin/433send 2 1A $i 0 #off
|
||||
for j in {1..16}
|
||||
do
|
||||
/usr/local/bin/433send 2 $j $i 0 #off
|
||||
done
|
||||
done
|
||||
logger -t $(basename $0) "all lights should be off now"
|
||||
fi
|
||||
if [ "$1" = "released" ]
|
||||
then # switch status lights on, in any case
|
||||
/usr/local/bin/433send 2 1A 2 1 #on
|
||||
/usr/local/bin/433send 2 2A 1 1 #on
|
||||
fi
|
||||
if [ "$1" = "released" ] && # the door has been opened
|
||||
# [ "$(cat /run/spacestatus)" = "open" ] && # status is open
|
||||
|
@ -30,7 +33,7 @@ then
|
|||
fi
|
||||
|
||||
# type (2=10bit)
|
||||
# | house 1-16 (always 1 in our case)
|
||||
# | house 1-16 (the dial thingie)
|
||||
# | |group A-P (the dial thingie)
|
||||
# | || unit (1-16) (the button, usually 1-4)
|
||||
# | || | on/off
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
96f7896f97asdf89u0a9s7d7fdasgsda88af
|
|
@ -6,10 +6,10 @@ P() {
|
|||
while ! mkdir "$LockDir" 2>/dev/null
|
||||
do
|
||||
LockDirStamp=$(stat -c %Y "$LockDir" 2>/dev/null)
|
||||
if [ "$LockDirStamp" != "" ] && [ "$LockDirStamp" -lt $(date --date "90 seconds ago" +%s) ]
|
||||
if [ "$LockDirStamp" != "" ] && [ "$LockDirStamp" -lt $(date --date "300 seconds ago" +%s) ]
|
||||
then
|
||||
rmdir "$LockDir"
|
||||
logger -t $(basename $0) "deleting stale semaphore dir $LockDir"
|
||||
logger -t $(basename $0) "$$ deleting stale semaphore dir $LockDir"
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
@ -18,7 +18,7 @@ V() {
|
|||
rmdir "$LockDir" 2>/dev/null
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
logger -t $(basename $0) "semaphore dir $LockDir disappeared while running"
|
||||
logger -t $(basename $0) "$$ semaphore dir $LockDir disappeared while running"
|
||||
fi
|
||||
}
|
||||
P
|
||||
|
@ -26,10 +26,10 @@ if [ ! -f /run/spacestatus ] # self initilizing on new install or boot
|
|||
then
|
||||
if [ -f /root/var/spacestatus ]
|
||||
then # we could also get it from spaceapi, so that could should go here:
|
||||
logger -t $(basename $0) "boot detected, restoring spacestatus to $(cat /root/var/spacestatus)"
|
||||
logger -t $(basename $0) "$$ boot detected, restoring spacestatus to $(cat /root/var/spacestatus)"
|
||||
cp -p /root/var/spacestatus /run/spacestatus # restore from backup
|
||||
else
|
||||
logger -t $(basename $0) "never run before (new install?) setting spacestatus to closed"
|
||||
logger -t $(basename $0) "$$ never run before (new install?) setting spacestatus to closed"
|
||||
echo "closed" > /run/spacestatus
|
||||
fi
|
||||
chown www-data /run/spacestatus
|
||||
|
@ -42,14 +42,14 @@ nai=$(stat -c "%Y" /run/spacestatus) # get mtime as status change time
|
|||
if [ "$status" = "open" ]
|
||||
then
|
||||
/usr/bin/curl --max-time 1 --silent --data key="$spaceapikey" --data-urlencode sensors='{"state":{"open":true,"lastchange":'"$nai"'}}' http://spaceapi.syn2cat.lu/sensor/set
|
||||
#logger -t $(basename $0) "sending status $status to spacapi ret=$?"
|
||||
#logger -t $(basename $0) "$$ sending status $status to spacapi ret=$?"
|
||||
fi
|
||||
for plugin in $(ls "$0".d)
|
||||
do
|
||||
if [ -x "$0".d/"$plugin" ]
|
||||
then
|
||||
"$0".d/"$plugin" "$status" "$oldstatus"
|
||||
logger -t $(basename $0) "called $plugin '$status' '$oldstatus'. ret=$?"
|
||||
logger -t $(basename $0) "$$ called $plugin '$status' '$oldstatus'. ret=$?"
|
||||
fi
|
||||
done
|
||||
|
||||
|
@ -60,13 +60,13 @@ then
|
|||
# will be the time of closing but not that of actually shutting the door
|
||||
# but the status will only be updated once the door is shut
|
||||
/usr/bin/curl --max-time 1 --silent --data key="$spaceapikey" --data-urlencode sensors='{"state":{"open":false,"lastchange":'"$nai"'}}' http://spaceapi.syn2cat.lu/sensor/set
|
||||
#logger -t $(basename $0) "sending status $status to spacapi ret=$?"
|
||||
#logger -t $(basename $0) "$$ sending status $status to spacapi ret=$?"
|
||||
fi
|
||||
|
||||
if [ $nai -ne $(stat -c "%Y" /root/var/spacestatus) ] # backup file in case it changed
|
||||
then
|
||||
cp -p /run/spacestatus /root/var/spacestatus
|
||||
logger -t $(basename $0) "spacestatus changed, saving to SD. ret=$?"
|
||||
logger -t $(basename $0) "$$ spacestatus changed, saving to SD. ret=$?"
|
||||
fi
|
||||
presency=$(cat /run/presency)
|
||||
if [ "$status" = "closed" ]
|
||||
|
|
|
@ -11,13 +11,16 @@ then
|
|||
logger -t $(basename $0) "switching all lights off"
|
||||
for i in {1..16}
|
||||
do
|
||||
/usr/local/bin/433send 2 1A $i 0 #off
|
||||
for j in {1..16}
|
||||
do
|
||||
/usr/local/bin/433send 2 $j $i 0 #off
|
||||
done
|
||||
done
|
||||
logger -t $(basename $0) "all lights should be off now"
|
||||
fi
|
||||
if [ "$1" = "released" ]
|
||||
then # switch status lights on, in any case
|
||||
/usr/local/bin/433send 2 1A 2 1 #on
|
||||
/usr/local/bin/433send 2 2A 1 1 #on
|
||||
fi
|
||||
if [ "$1" = "released" ] && # the door has been opened
|
||||
# [ "$(cat /run/spacestatus)" = "open" ] && # status is open
|
||||
|
@ -30,7 +33,7 @@ then
|
|||
fi
|
||||
|
||||
# type (2=10bit)
|
||||
# | house 1-16 (always 1 in our case)
|
||||
# | house 1-16 (the dial thingie)
|
||||
# | |group A-P (the dial thingie)
|
||||
# | || unit (1-16) (the button, usually 1-4)
|
||||
# | || | on/off
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Tezza (@Kaweechelchen | tezza@syn2cat.lu)
|
||||
* Tezza (@Kaweechelchen | tezza@syn2cat.lu)
|
||||
* https://github.com/J7mbo/twitter-api-php
|
||||
* */
|
||||
|
||||
|
@ -14,8 +14,8 @@ $statusTag = '#statusUpdate';
|
|||
|
||||
// Set the messages to tweet when the status of the hackspace changes
|
||||
// %s is going to be replaced by the current time to avoid duplicate tweets on Twitter
|
||||
$messageOpen = "It's %s and we are open \o/, come in and create something awesome =) $statusTag";
|
||||
$messageClosed = "We just closed our doors at %s. See you very soon... $statusTag";
|
||||
$messageOpen = "It's %s and we are open \o/ \ncome in and create something awesome =) \nhttps://Level2.lu/openingTimes";
|
||||
$messageClosed = "We just closed our doors at %s \nSee you very soon... \nhttps://Level2.lu/openingTimes";
|
||||
|
||||
require_once('TwitterAPIExchange.php');
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
|
||||
$settings = array(
|
||||
'oauth_access_token' => '',
|
||||
'oauth_access_token_secret' => '',
|
||||
'consumer_key' => '',
|
||||
'consumer_secret' => ''
|
||||
);
|
||||
?>
|
|
@ -73,4 +73,4 @@ T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
|
|||
|
||||
# pidor
|
||||
P0:2345:respawn:/root/pidor/scripts/lockbutton.sh
|
||||
#P1:2345:respawn:/root/pidor/scripts/phone_notification.sh
|
||||
P1:2345:respawn:/root/pidor/scripts/beamerdetect.sh
|
||||
|
|
Loading…
Reference in New Issue