This sketch implements a COSM Gateway.
#include <SPI.h>
#include <Ethernet.h>
#include "HardwareRadio.h"
#define APIKEY "The quick brown fox" // replace your Pachube api key here
#define FEEDID 123456 // replace your feed ID
#define USERAGENT "Radiofaro" // user agent is the project name
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(10,0,1,20);
EthernetClient client;
IPAddress server(216,52,233,121);
unsigned long lastConnectionTime = 0;
boolean lastConnected = false;
const unsigned long postingInterval = 20*1000;
char ln[80];
byte idx = 0;
byte lncnt = 0;
boolean hasData=0;
String dataString = "";
String addr_whitelist[] = {"0xFECA", "0xAFFE"};
void setup() {
Serial.begin(9600);
delay(1000);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
}
boolean parse(char *ln)
{
byte i=0;
char *sarr[8];
char *s = ln;
boolean valid=0;
Serial.print("Line In: ");
Serial.print(ln);
do{
if((*s==',') || (*s == '=')) *s=' ';
}while(*s++);
s=sarr[i++]=strtok(ln, " ");
dataString="";
do{
s=sarr[i++]=strtok(NULL, " ");
}while( (NULL != s) && (i<sizeof(sarr)/sizeof(sarr[0])) );
if(sarr[2][0]=='T' && sarr[4][0]=='V'){
s=sarr[3];
while(*s && (*s>='0' && *s<='9' || *s=='.' || *s=='-') ){
s++;
};
if(*s){
} else {
dataString += "temp,";
dataString += sarr[3];
dataString += "\nvolt,";
dataString += sarr[5];
valid = 1;
}
}
if(!valid){
Serial.println("Parsing error");
} else {
Serial.print("Parsed: ");
Serial.println(dataString);
}
return valid;
}
void loop() {
{
if(c == '\0'){
idx = 0;
} else {
ln[idx] = c;
idx++;
}
ln[idx] = '\0';
if( ('\n' == c) || ('\r' == c) ) {
hasData = parse(ln);
lncnt++;
idx = 0;
}
}
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
if(!client.connected() && (millis() - lastConnectionTime > postingInterval) && hasData>0) {
Serial.print("Pachube: ");
Serial.println(dataString);
sendData(dataString);
hasData=0;
}
lastConnected = client.connected();
}
void sendData(String thisData) {
if (client.connect(server, 80)) {
Serial.println("connecting...");
client.print("PUT /v2/feeds/");
client.print(FEEDID);
client.println(".csv HTTP/1.1");
client.println("Host: api.pachube.com");
client.print("X-pachubeApiKey: ");
client.println(APIKEY);
client.print("User-Agent: ");
client.println(USERAGENT);
client.print("Content-Length: ");
client.println(thisData.length());
client.println("Content-Type: text/csv");
client.println("Connection: close");
client.println();
client.println(thisData);
}
else {
Serial.println("connection failed");
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
lastConnectionTime = millis();
}