|
@@ -0,0 +1,122 @@
|
|
|
+#include <SPI.h>
|
|
|
+#include <Ethernet.h>
|
|
|
+#include <RCSwitch.h>
|
|
|
+
|
|
|
+byte mac[] = {0xDE, 0xAD, 0xBE, 0xAA, 0xDE, 0x01};
|
|
|
+IPAddress ip(192,168,2,114);
|
|
|
+const int serverPort = 2313;
|
|
|
+const int senderPin = 6;
|
|
|
+const int requestBufferLength = 16;
|
|
|
+const int attemptsCount = 3;
|
|
|
+
|
|
|
+EthernetServer server(serverPort);
|
|
|
+RCSwitch sender = RCSwitch();
|
|
|
+char requestBuffer[requestBufferLength];
|
|
|
+
|
|
|
+void setup()
|
|
|
+{
|
|
|
+ Serial.begin(9600);
|
|
|
+
|
|
|
+ sender.enableTransmit(senderPin);
|
|
|
+ sender.switchOn('b', 3, 2);
|
|
|
+ Serial.println("transmission enabled");
|
|
|
+
|
|
|
+ Ethernet.begin(mac, ip);
|
|
|
+ server.begin();
|
|
|
+
|
|
|
+ Serial.print("started ardvindo server at ");
|
|
|
+ Serial.print(Ethernet.localIP());
|
|
|
+ Serial.print(":");
|
|
|
+ Serial.println(serverPort);
|
|
|
+}
|
|
|
+
|
|
|
+void errorResponse(EthernetClient& client, const char* cmd, const char* msg)
|
|
|
+{
|
|
|
+ Serial.print("error: ");
|
|
|
+ Serial.println(msg);
|
|
|
+
|
|
|
+ client.print("cmd: ");
|
|
|
+ client.println(cmd);
|
|
|
+ client.print("error: ");
|
|
|
+ client.println(msg);
|
|
|
+}
|
|
|
+
|
|
|
+void processCmd(EthernetClient& client, const char* cmd)
|
|
|
+{
|
|
|
+ if(cmd[0] == 'e' || cmd[0] == 'd') {
|
|
|
+ char family = requestBuffer[2];
|
|
|
+ int group = requestBuffer[4] - '0';
|
|
|
+ int device = requestBuffer[6] - '0';
|
|
|
+
|
|
|
+ if(family < 'a' || family > 'f') {
|
|
|
+ errorResponse(client, cmd, "error: family < 'a' || family > 'f'");
|
|
|
+ } else if(group < 0) {
|
|
|
+ errorResponse(client, cmd, "group < 0");
|
|
|
+ } else if(device < 0) {
|
|
|
+ errorResponse(client, cmd, "device < 0");
|
|
|
+ } else {
|
|
|
+ bool on = (requestBuffer[0] == 'e');
|
|
|
+
|
|
|
+ for(int i = 0; i < attemptsCount; i++) {
|
|
|
+ if(on) {
|
|
|
+ sender.switchOn(family, group, device);
|
|
|
+ } else {
|
|
|
+ sender.switchOff(family, group, device);
|
|
|
+ }
|
|
|
+ delay(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ client.print(family);
|
|
|
+ client.print(" ");
|
|
|
+ client.print(group);
|
|
|
+ client.print(" ");
|
|
|
+ client.print(device);
|
|
|
+ client.print(" ");
|
|
|
+ if(on) {
|
|
|
+ client.println("switched on");
|
|
|
+ Serial.println("switched on");
|
|
|
+ } else {
|
|
|
+ client.println("switched off");
|
|
|
+ Serial.println("switched off");
|
|
|
+ }
|
|
|
+
|
|
|
+ //sender.switchOn('b', 3, 2);
|
|
|
+ //delay(1500);
|
|
|
+ //sender.switchOff('b', 3, 2);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ errorResponse(client, cmd, "unknown command");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void loop()
|
|
|
+{
|
|
|
+ EthernetClient client = server.available();
|
|
|
+ if (client) {
|
|
|
+ Serial.println("client connected");
|
|
|
+
|
|
|
+ client.println("ardvindo");
|
|
|
+
|
|
|
+ while(client.connected()) {
|
|
|
+ if(client.available()) {
|
|
|
+ for(int i=0; i<requestBufferLength && client.available(); i++) {
|
|
|
+ char c = client.read();
|
|
|
+ if(c == '\n') {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ requestBuffer[i] = c;
|
|
|
+ requestBuffer[i+1] = '\0';
|
|
|
+ }
|
|
|
+ Serial.print("> ");
|
|
|
+ Serial.println(requestBuffer);
|
|
|
+ processCmd(client, requestBuffer);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ delay(1);
|
|
|
+ client.stop();
|
|
|
+
|
|
|
+ Serial.println("client disonnected");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|