updated version. Now with there is an API key. And it works :D
This commit is contained in:
parent
35438eb87f
commit
9814908d7a
7 changed files with 122 additions and 140 deletions
5
ITS_Open_direct/APIKey_template.h
Normal file
5
ITS_Open_direct/APIKey_template.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
// rename this file to "APIKey.h" and fill in a real key!
|
||||||
|
|
||||||
|
String thingtweetAPIKey = "myThingspeakKey";
|
||||||
|
String serverAPIKey = "myserverAPIKey";
|
||||||
|
|
|
@ -26,32 +26,14 @@ Example sketches from Arduino team, Ethernet by Adrian McEwen
|
||||||
|
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
#include <Ethernet.h>
|
#include <Ethernet.h>
|
||||||
//#include <EthernetUdp.h>
|
|
||||||
|
|
||||||
#include "APIKey.h"
|
#include "APIKey.h"
|
||||||
|
|
||||||
|
|
||||||
char ITSAddress[] = "it-syndikat.org";
|
|
||||||
|
|
||||||
// Local Network Settings
|
// Local Network Settings
|
||||||
byte mac[] = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 }; // Must be unique on local network
|
//byte mac[] = { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 }; // Must be unique on local network
|
||||||
|
|
||||||
unsigned int localPort = 8888; // local port to listen for UDP packets
|
byte mac[] = { 0xD4, 0xBE, 0xD9, 0x9A, 0x7C, 0x95 }; // Must be unique on local network
|
||||||
|
|
||||||
// Variable Setup - check if these Variables are needed
|
|
||||||
long lastConnectionTime = 0;
|
|
||||||
boolean lastConnected = true;
|
|
||||||
int failedCounter = 0;
|
|
||||||
|
|
||||||
// NTP stuff
|
|
||||||
//IPAddress timeServer(132, 163, 4, 101); // time-a.timefreq.bldrdoc.gov NTP server
|
|
||||||
IPAddress timeServer(193,170,62,252); // ana austrian one
|
|
||||||
// IPAddress timeServer(132, 163, 4, 102); // time-b.timefreq.bldrdoc.gov NTP server
|
|
||||||
// IPAddress timeServer(132, 163, 4, 103); // time-c.timefreq.bldrdoc.gov NTP server
|
|
||||||
|
|
||||||
const int NTP_PACKET_SIZE= 48; // NTP time stamp is in the first 48 bytes of the message
|
|
||||||
|
|
||||||
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
|
|
||||||
|
|
||||||
// Initialize Arduino Ethernet Client
|
// Initialize Arduino Ethernet Client
|
||||||
EthernetClient client;
|
EthernetClient client;
|
||||||
|
@ -59,23 +41,11 @@ EthernetClient client;
|
||||||
// Twitter response variables
|
// Twitter response variables
|
||||||
char serverName[] = "it-syndikat.org"; // twitter URL
|
char serverName[] = "it-syndikat.org"; // twitter URL
|
||||||
String currentLine = ""; // string to hold the text from server
|
String currentLine = ""; // string to hold the text from server
|
||||||
String tweet = ""; // string to hold the tweet
|
|
||||||
boolean readingTweet = false; // if you're currently reading the tweet
|
|
||||||
|
|
||||||
|
|
||||||
// Specific variables
|
// Specific variables
|
||||||
// Status
|
// Status
|
||||||
int hsopen =2;
|
int hsopen =2;
|
||||||
int ethernetstatus = -1;
|
int ethernetstatus = -1;
|
||||||
/*
|
|
||||||
0=not set
|
|
||||||
1=read thingspeak response
|
|
||||||
2=read tweet
|
|
||||||
*/
|
|
||||||
int readStatus=0;
|
|
||||||
|
|
||||||
// Twitter message, intermediate part
|
|
||||||
String tmsg = " Hackerspace at ";
|
|
||||||
|
|
||||||
//debug options
|
//debug options
|
||||||
boolean debug = true;
|
boolean debug = true;
|
||||||
|
@ -130,50 +100,22 @@ void setup()
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
switch(readStatus){
|
readButtons();
|
||||||
case 0:{
|
|
||||||
readStatus = readButtons();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1:{
|
|
||||||
readStatus = readServerReturn();
|
|
||||||
if(debug){
|
|
||||||
Serial.print("got it ... status: ");
|
|
||||||
Serial.println(readStatus);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2:{
|
|
||||||
readStatus = readServerStatus();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if Arduino Ethernet needs to be restarted
|
|
||||||
|
|
||||||
lastConnected = client.connected();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int readButtons(){
|
void readButtons(){
|
||||||
int ret=0;
|
int ret=0;
|
||||||
if((digitalRead(topen)==LOW)&&(hsopen!=1)){
|
if((digitalRead(topen)==LOW)&&(hsopen!=1)){
|
||||||
startEthernet();
|
//startEthernet();
|
||||||
setRoom(2);
|
setRoom(2);
|
||||||
TriggerServerUpdate(true);
|
TriggerServerUpdate(true);
|
||||||
hsopen=1;
|
|
||||||
ret=1;
|
|
||||||
setRoom(hsopen);
|
|
||||||
}
|
}
|
||||||
if((digitalRead(tclose)==LOW)&&(hsopen!=0)){
|
if((digitalRead(tclose)==LOW)&&(hsopen!=0)){
|
||||||
startEthernet();
|
//startEthernet();
|
||||||
setRoom(2);
|
setRoom(2);
|
||||||
TriggerServerUpdate(false);
|
TriggerServerUpdate(false);
|
||||||
hsopen=0;
|
|
||||||
ret=1;
|
|
||||||
setRoom(hsopen);
|
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void startEthernet()
|
void startEthernet()
|
||||||
|
@ -236,12 +178,14 @@ void TriggerServerReq() {
|
||||||
// make HTTP GET request to server:
|
// make HTTP GET request to server:
|
||||||
client.println("GET /status-s.php HTTP/1.1");
|
client.println("GET /status-s.php HTTP/1.1");
|
||||||
client.println("HOST: it-syndikat.org");
|
client.println("HOST: it-syndikat.org");
|
||||||
|
client.println("Connection: close");
|
||||||
client.println();
|
client.println();
|
||||||
|
readServerStatus();
|
||||||
|
//readServerReturn();
|
||||||
}else{
|
}else{
|
||||||
if(debug){Serial.println("Not connected...");}
|
if(debug){Serial.println("Not connected...");}
|
||||||
}
|
}
|
||||||
// note the time of this connect attempt:
|
// note the time of this connect attempt:
|
||||||
readStatus=2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerServerUpdate(boolean stat) {
|
void TriggerServerUpdate(boolean stat) {
|
||||||
|
@ -251,82 +195,82 @@ void TriggerServerUpdate(boolean stat) {
|
||||||
if(debug){Serial.println("making HTTP request...");}
|
if(debug){Serial.println("making HTTP request...");}
|
||||||
// make HTTP GET request to server:
|
// make HTTP GET request to server:
|
||||||
String s =(stat?"true":"false");
|
String s =(stat?"true":"false");
|
||||||
client.println("GET /update.php?open=" + s + " HTTP/1.1");
|
client.println("GET /update.php?open=" + s + "&apikey="+serverAPIKey+" HTTP/1.1");
|
||||||
client.println("HOST: it-syndikat.org");
|
client.println("HOST: it-syndikat.org");
|
||||||
|
client.println("Connection: close");
|
||||||
client.println();
|
client.println();
|
||||||
|
readServerStatus();
|
||||||
}else{
|
}else{
|
||||||
if(debug){Serial.println("Not connected...");}
|
if(debug){Serial.println("Not connected...");}
|
||||||
}
|
}
|
||||||
// note the time of this connect attempt:
|
// note the time of this connect attempt:
|
||||||
readStatus=1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//clean this mess up
|
//reads out the status returned by the server and sets the LED's appropriately.
|
||||||
int readServerStatus() {
|
int readServerStatus() {
|
||||||
if (client.connected()) {
|
char lastsign='0';
|
||||||
|
boolean readStatus = false;
|
||||||
|
while(client.connected()) {
|
||||||
if (client.available()) {
|
if (client.available()) {
|
||||||
// read incoming bytes:
|
// read incoming bytes:
|
||||||
char inChar = client.read();
|
char inChar = client.read();
|
||||||
|
|
||||||
// add incoming byte to end of line:
|
// add incoming byte to end of line:
|
||||||
currentLine += inChar;
|
currentLine += inChar;
|
||||||
|
|
||||||
|
if(debug){Serial.print(inChar);}
|
||||||
|
|
||||||
// if you get a newline, clear the line:
|
// if you get a newline, clear the line:
|
||||||
if (inChar == '\n') {
|
if (inChar == '\n') {
|
||||||
currentLine = "";
|
currentLine = "";
|
||||||
|
if(lastsign == '\n'){ // /r/n /r/n is the end of a header
|
||||||
|
readStatus= true; //start to parse the content of the line
|
||||||
|
if(debug){Serial.println("##END OF HEADER##");}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if you're currently reading the bytes of a tweet,
|
if (readStatus) {
|
||||||
// add them to the tweet String:
|
// if you got a "<" character,
|
||||||
if (readingTweet) {
|
// you've reached the end of the tweet:
|
||||||
if (inChar != '<') {
|
if(currentLine.startsWith("true", 0)){
|
||||||
tweet += inChar;
|
if(debug){Serial.println("");}
|
||||||
}
|
hsopen=1;
|
||||||
else {
|
|
||||||
// if you got a "<" character,
|
|
||||||
// you've reached the end of the tweet:
|
|
||||||
readingTweet = false;
|
|
||||||
if(debug){Serial.println("Message:");}
|
|
||||||
if(debug){Serial.println(tweet);}
|
|
||||||
if(debug){Serial.println(tweet.startsWith("true", 0));}
|
|
||||||
if(debug){Serial.println(tweet.startsWith("false", 0));}
|
|
||||||
if(tweet.startsWith("true", 0)){hsopen=1;}
|
|
||||||
else {if(tweet.startsWith("false", 0)){hsopen=0;}
|
|
||||||
else {hsopen=-1;}}
|
|
||||||
setRoom(hsopen);
|
setRoom(hsopen);
|
||||||
// close the connection to the server:
|
// close the connection to the server:
|
||||||
client.stop();
|
client.stop();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if(currentLine.startsWith("false", 0)){
|
||||||
|
if(debug){Serial.println("");}
|
||||||
|
hsopen=0;
|
||||||
|
setRoom(hsopen);
|
||||||
|
// close the connection to the server:
|
||||||
|
client.stop();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// if the current line ends with <text>, it will
|
if (inChar != '\r') {// removes /r so we dan test if the header end with two newlines, hacky but works.
|
||||||
// be followed by the tweet:
|
lastsign = inChar;
|
||||||
if ( currentLine.endsWith("<status>")) {
|
}
|
||||||
// tweet is beginning. Clear the tweet string:
|
}
|
||||||
readingTweet = true;
|
|
||||||
tweet = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 2;
|
hsopen=-1;
|
||||||
|
setRoom(hsopen);
|
||||||
|
client.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//clean this mess up
|
//This just reads the server return and logs it to the serial
|
||||||
int readServerReturn() {
|
void readServerReturn() {
|
||||||
//if(debug){Serial.println("readServerReturn ... ");}
|
//if(debug){Serial.println("readServerReturn ... ");}
|
||||||
if (client.connected()) {
|
while(client.connected()) {
|
||||||
if (client.available()) {
|
if (client.available()) {
|
||||||
char c = client.read();
|
char c = client.read();
|
||||||
Serial.print(c);
|
if(debug){Serial.print(c);}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
return 1;
|
}
|
||||||
}else{
|
if(debug){Serial.println();}
|
||||||
Serial.println();
|
if(debug){Serial.println("disconnecting.");}
|
||||||
Serial.println("disconnecting.");
|
client.stop();
|
||||||
client.stop();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
<!--
|
|
||||||
Copypasta:
|
|
||||||
|
|
||||||
char thingSpeakAddress[] = "api.thingspeak.com";
|
|
||||||
|
|
||||||
|
|
||||||
-->
|
|
||||||
<?php
|
|
||||||
|
|
||||||
|
|
||||||
$username = ($_POST['t_user']);
|
|
||||||
$password = ($_POST['t_pass']);
|
|
||||||
$message = ($_POST['t_update']);
|
|
||||||
|
|
||||||
$url = 'http://twitter.com/statuses/update.xml';
|
|
||||||
$curl_handle = curl_init();
|
|
||||||
curl_setopt($curl_handle, CURLOPT_URL, "$url");
|
|
||||||
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
|
|
||||||
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
|
|
||||||
curl_setopt($curl_handle, CURLOPT_POST, 1);
|
|
||||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
|
|
||||||
curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
|
|
||||||
$buffer = curl_exec($curl_handle);
|
|
||||||
curl_close($curl_handle);
|
|
||||||
if (empty($buffer)) {
|
|
||||||
echo "<p align=\"center\" >".'Sorry, due to an error your Twitter status could not be updated! Please check your username/password!'."</p>";
|
|
||||||
} else {
|
|
||||||
echo "<p align=\"center\">".'Your Twitter status has successfully been updated!'."</p>";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
|
|
9
server/status-s.php
Normal file
9
server/status-s.php
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
header('Content-type: text/plain');
|
||||||
|
$str=file_get_contents('status.txt');
|
||||||
|
$arr=explode(',',$str);
|
||||||
|
$open=$arr[0];
|
||||||
|
$date=$arr[1]; //lastchange: upadate via file see explode/implode
|
||||||
|
echo $open;
|
||||||
|
?>
|
||||||
|
|
33
server/status.php
Normal file
33
server/status.php
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
header('Content-type: application/json');
|
||||||
|
$str=file_get_contents('status.txt');
|
||||||
|
$arr=explode(',',$str);
|
||||||
|
$open=$arr[0];
|
||||||
|
$date=$arr[1]; //lastchange: upadate via file see explode/implode
|
||||||
|
echo <<< eot
|
||||||
|
{
|
||||||
|
"api":"0.12",
|
||||||
|
"space":"IT-Syndikat",
|
||||||
|
"url":"http://it-syndikat.org",
|
||||||
|
"icon":{
|
||||||
|
"open":"http://it-syndikat.org/images/ITS_Open.png",
|
||||||
|
"closed":"http://it-syndikat.org/images/ITS_Closed.png"
|
||||||
|
},
|
||||||
|
"address":"Tschamlerstrasse 3, 6020 Innsbruck, Austria",
|
||||||
|
"contact":{
|
||||||
|
"phone":"+43512563468",
|
||||||
|
"twitter":"@ItSyndikat",
|
||||||
|
"email":"wir@it-syndikat.org",
|
||||||
|
"ml":"its-public@lists.catbull.com"
|
||||||
|
},
|
||||||
|
"open":$open,
|
||||||
|
"lastchange":$date,
|
||||||
|
"logo":"http://it-syndikat.org/images/its_l.png",
|
||||||
|
"lat":47.2578,
|
||||||
|
"lon":11.3961
|
||||||
|
}
|
||||||
|
|
||||||
|
eot;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
1
server/status.txt
Normal file
1
server/status.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
false,1361048493
|
22
server/update.php
Normal file
22
server/update.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
header('Content-type: text/plain');
|
||||||
|
if(isset($_GET['apikey']) && ($_GET['apikey']=='apikey1' || $_GET['apikey']=='apikey2')){
|
||||||
|
if(isset($_GET['open']) && $_GET['open']=='true')
|
||||||
|
{
|
||||||
|
file_put_contents ( 'status.txt' , 'true,'.time() );
|
||||||
|
echo "true";
|
||||||
|
}else if(isset($_GET['open']) && $_GET['open'] =='false')
|
||||||
|
{
|
||||||
|
file_put_contents ( 'status.txt' , 'false,'.time() );
|
||||||
|
echo "false";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$str=file_get_contents('status.txt');
|
||||||
|
$arr=explode(',',$str);
|
||||||
|
$open=$arr[0];
|
||||||
|
$date=$arr[1]; //lastchange: upadate via file see explode/implode
|
||||||
|
echo "API Key Missing!\n";
|
||||||
|
echo $open;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
Reference in a new issue