From 9c40e216191f0af927191a21e3086fbdb8b0daf5 Mon Sep 17 00:00:00 2001 From: Level2 Pidor Date: Sun, 19 Jul 2015 19:48:02 +0200 Subject: [PATCH] :merged production code with code on github --- .../upd_status.sh.d/.gitignore => .gitignore | 1 + rcswitch-pi/Makefile | 9 + rcswitch-pi/RCSwitch.cpp | 583 ++++++++++++++++++ rcswitch-pi/RCSwitch.h | 123 ++++ rcswitch-pi/RCSwitch.o | Bin 0 -> 12400 bytes rcswitch-pi/README.md | 14 + rcswitch-pi/down.raw | 1 + rcswitch-pi/on | 6 + rcswitch-pi/rawsend | Bin 0 -> 17429 bytes rcswitch-pi/rawsend.cpp | 49 ++ rcswitch-pi/rawsend.o | Bin 0 -> 2196 bytes rcswitch-pi/send | Bin 0 -> 20302 bytes rcswitch-pi/send.cpp | 146 +++++ rcswitch-pi/send.o | Bin 0 -> 7000 bytes scripts/lockbutton.sh.d/lights | 9 +- scripts/spaceapikey.txt.sample | 1 + scripts/upd_status.sh | 18 +- scripts/upd_status.sh.d/lights | 9 +- scripts/upd_status.sh.d/tweet | 6 +- .../upd_status.sh.d/twittertokens.php.sample | 9 + systemfiles/inittab | 2 +- 21 files changed, 967 insertions(+), 19 deletions(-) rename scripts/upd_status.sh.d/.gitignore => .gitignore (52%) create mode 100644 rcswitch-pi/Makefile create mode 100644 rcswitch-pi/RCSwitch.cpp create mode 100644 rcswitch-pi/RCSwitch.h create mode 100644 rcswitch-pi/RCSwitch.o create mode 100644 rcswitch-pi/README.md create mode 100644 rcswitch-pi/down.raw create mode 100644 rcswitch-pi/on create mode 100755 rcswitch-pi/rawsend create mode 100644 rcswitch-pi/rawsend.cpp create mode 100644 rcswitch-pi/rawsend.o create mode 100755 rcswitch-pi/send create mode 100644 rcswitch-pi/send.cpp create mode 100644 rcswitch-pi/send.o create mode 100644 scripts/spaceapikey.txt.sample create mode 100644 scripts/upd_status.sh.d/twittertokens.php.sample diff --git a/scripts/upd_status.sh.d/.gitignore b/.gitignore similarity index 52% rename from scripts/upd_status.sh.d/.gitignore rename to .gitignore index ff8cd31..6ef556d 100644 --- a/scripts/upd_status.sh.d/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ twittertokens.php +spaceapikey.txt diff --git a/rcswitch-pi/Makefile b/rcswitch-pi/Makefile new file mode 100644 index 0000000..ad04124 --- /dev/null +++ b/rcswitch-pi/Makefile @@ -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 diff --git a/rcswitch-pi/RCSwitch.cpp b/rcswitch-pi/RCSwitch.cpp new file mode 100644 index 0000000..4ce4df9 --- /dev/null +++ b/rcswitch-pi/RCSwitch.cpp @@ -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; nRepeatsendT0(); + 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; nRepeatsend0(); + 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 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 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; +} + diff --git a/rcswitch-pi/RCSwitch.h b/rcswitch-pi/RCSwitch.h new file mode 100644 index 0000000..f762ebc --- /dev/null +++ b/rcswitch-pi/RCSwitch.h @@ -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 + #include + #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 diff --git a/rcswitch-pi/RCSwitch.o b/rcswitch-pi/RCSwitch.o new file mode 100644 index 0000000000000000000000000000000000000000..320d42e0ae11fc1b218cb54e67f48c88432e5cf5 GIT binary patch literal 12400 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 YPS6!>6-)@`1Pg+m;2yyd!BN3~0?Ug%qW}N^ literal 0 HcmV?d00001 diff --git a/rcswitch-pi/README.md b/rcswitch-pi/README.md new file mode 100644 index 0000000..9b99a59 --- /dev/null +++ b/rcswitch-pi/README.md @@ -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. diff --git a/rcswitch-pi/down.raw b/rcswitch-pi/down.raw new file mode 100644 index 0000000..4dce7e0 --- /dev/null +++ b/rcswitch-pi/down.raw @@ -0,0 +1 @@ +11111101000110010000100010100010000100000000100000000001001001001110010000000000000000000000000 diff --git a/rcswitch-pi/on b/rcswitch-pi/on new file mode 100644 index 0000000..409ad7e --- /dev/null +++ b/rcswitch-pi/on @@ -0,0 +1,6 @@ +./send 2 1A 1 1 + +off +./send 2 1A 1 0 + + diff --git a/rcswitch-pi/rawsend b/rcswitch-pi/rawsend new file mode 100755 index 0000000000000000000000000000000000000000..530bc107eeaf0347828dfd052036fdd13944d44b GIT binary patch literal 17429 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 literal 0 HcmV?d00001 diff --git a/rcswitch-pi/rawsend.cpp b/rcswitch-pi/rawsend.cpp new file mode 100644 index 0000000..d7784a6 --- /dev/null +++ b/rcswitch-pi/rawsend.cpp @@ -0,0 +1,49 @@ +/* + Usage: ./send + bitlen is in microsecond + Command is 0 for OFF and 1 for ON + */ + +#include "RCSwitch.h" +#include +#include +#include + +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"); +} diff --git a/rcswitch-pi/rawsend.o b/rcswitch-pi/rawsend.o new file mode 100644 index 0000000000000000000000000000000000000000..91e145c2a1ef4c017365aa91287c0521b308050d GIT binary patch literal 2196 zcmah~&u<%55T4CC!A$~~B&BU)U@HMH(QYj2=ctmqWEk&(kE)J4;Ve`(Jbl2kV^zP4reW6TK0u-JP^xTXVgX zb*DqtS3RBDkN-P7{4>KG_|x#sfWtnr+K)8~y3o^_)z$;+@85{Fx|n+$xVu91NAyjU zYf{_mWioR;-H3ALt&1I%|6khcO(Mp5m0#hX5sT;RrZM+vUVO(MZas?xBJx6#u#;%Z6qby|2^>$z_IEJjchGR?HSO^T$ zG{=b?cUyQ&mcH!;bs>$*?`~XO5Fc^eK(1D$;sybYI}Oi8?!vd)XZ!oNK8HDwwPNut zV{yeT3)?f6&GY7)OS$Ez9`-rJm58N$B{gET!$)C@rv*z`~3u@lkjoBXuaR>CT#we>trb)->Z=s{&I}R z)mVp4{8Ye8ikkl#oLG~liZSnX1)vr0g^1UWd(Xn$!`N2bspp9v+rjxQ+y&6v-* z62@;R0L_@snG(ij1)v%44B^HQzCMKS4B>Bv@WUZYzP-zDtyyU{Y2KlEo9edk$d(O3 zyTZq_dRc6_vel#}fZV3i2OIg#;uap}O0}3ofM zZEx3FL6sb_Bcxq>-xt!w^IfxVu8WG_2;54;a{>ya(`ZR5mBQDy)be(P=af)ksp;pU z|B5UwKmomEr-*K`#>U)ZJwx;$#^13%PPEVZMWUZrpCI~`H8w7dJ-(|(nl&E82QfxEI-@RGHo8-1aH0MOj-_kk literal 0 HcmV?d00001 diff --git a/rcswitch-pi/send b/rcswitch-pi/send new file mode 100755 index 0000000000000000000000000000000000000000..f1ccb4a69ba5d588928bca4659d8d40d736d796d GIT binary patch literal 20302 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 + 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 +#include +#include + +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; + } diff --git a/rcswitch-pi/send.o b/rcswitch-pi/send.o new file mode 100644 index 0000000000000000000000000000000000000000..bc0e71714ecb200e8e248aa250c78f57c8e6bfa0 GIT binary patch literal 7000 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/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" ] diff --git a/scripts/upd_status.sh.d/lights b/scripts/upd_status.sh.d/lights index f6ba977..bff8d7d 100755 --- a/scripts/upd_status.sh.d/lights +++ b/scripts/upd_status.sh.d/lights @@ -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 diff --git a/scripts/upd_status.sh.d/tweet b/scripts/upd_status.sh.d/tweet index 0ba522a..1577d1a 100755 --- a/scripts/upd_status.sh.d/tweet +++ b/scripts/upd_status.sh.d/tweet @@ -2,7 +2,7 @@ '', + 'oauth_access_token_secret' => '', + 'consumer_key' => '', + 'consumer_secret' => '' +); +?> diff --git a/systemfiles/inittab b/systemfiles/inittab index 1e41501..07985e1 100644 --- a/systemfiles/inittab +++ b/systemfiles/inittab @@ -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