Go Down

Topic: home automation with arduino and android (Read 57499 times) previous topic - next topic

ezar

#15
Sep 25, 2010, 10:05 pm Last Edit: Sep 25, 2010, 10:08 pm by ezar Reason: 1
Thank you for this great idea!
Can you share android code please?
Regards,
eZar.

Guy

Any chance of getting your entire sketch? I have an app inventor program that I would like to use but need to program my arduino correctly to recognize web commands and I think this would work.

bl4d3

ok guys enjoy:
http://github.com/bl4d3/DomoticHome
it's my first time on github, hope all work fine, if someone will find bugs (nad I think there are on it) or needs some customizations let me know, of course, forking the project is welcome!

Pacman

Hey, i like your project :)

I have downloaded the android app, but can we have the .pde sktech ? I don't know how to send the JSON reponse with my Arduino

bl4d3

you can find an example at the first page of this thread :)

Pacman

Yeah ! Sorry, i had not seen :)

Thanks, and sorry for my english, i'm french .

And good work for this ^^

Pacman

Mhh, I have an error line 45 when I try to compile :

In function 'void loop()':
erreur: 'class String' has no member named 'append'


Do you know why ?

bl4d3

that sketch was for Arduino2009 and maybe you have an Arduino one, Am i wrong?
By the way i wrote a quick example that show how to activate/deactivate a digital out.
To activate the pin you have to make this http call
http://yourip/?out=5&status=1
to deactivate
http://yourip/?out=5&status=0
to get the list of the pins used by arduino
http://yourip/?out=all
last one is used to sync arduino with the domotichome app

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>

// define actions
#define action_none -1
#define action_out_all 0
#define action_mypin_up 1
#define action_mypin_down 2

// define network config
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE }; //physical mac address
byte ip[] = { 192, 168, 1, 20 };                  // ip in lan -> cambialo pure
byte gateway[] = { 192, 168, 1, 1 };                  // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                   //subnet mask
Server server(80);                                      //server port
String readString = String(30); //string for fetching data from address

// arduino out
int pinOutRelay = 5;

// incoming GET command  
String r_pinOutRelay_down = "GET /?out=5&status=0 HTTP/1.1";
String r_pinOutRelay_up = "GET /?out=5&status=1 HTTP/1.1";
String r_out_all = "GET /?out=all HTTP/1.1";

// current action
int current_action;

void setup(){
 //start Ethernet
 Ethernet.begin(mac, ip, gateway, subnet);
 
 pinMode(pinOutRelay, OUTPUT);    
 digitalWrite(pinOutRelay, LOW);
 //enable serial datada print  
 Serial.begin(9600);
 current_action = -1;
}
void loop(){
 current_action = -1;
 // Create a client connection
 Client client = server.available();
   if (client) {
     while (client.connected()) {
      if (client.available()) {
       char c = client.read();
       //read char by char HTTP request
       if (readString.length() < 30)
       {
         //store characters to string
         readString = readString + c;
       }  
       //output chars to serial port
       //Serial.print(c);
       //if HTTP request has ended
       if (c == '\n') {
     
        Serial.print(readString);
        // ****************************************************
         if(readString.startsWith(r_pinOutRelay_up))
         {
         Serial.print("\n HIGH\n");
         current_action = action_mypin_up;
         }
         else if(readString.startsWith(r_pinOutRelay_down))
         {
          Serial.print("\n LOW\n");
          current_action = action_mypin_down;              
         }
         else if(readString.startsWith(r_out_all))
         {
           Serial.print("\n ALL\n");
           current_action = action_out_all;
         }
         else
         {
           Serial.print("\n None \n");  
           current_action = action_none;
         }
        // ****************************************************  
         // now output HTML data starting with standart header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
        char buf[12];              
        switch(current_action)
        {
        case action_out_all:
          client.print("{\"ip\" : \"192.168.10.20\", \"devices\" : [{ \"type\" : \"gate\", \"name\" : \"caldaia\", \"out\" : \"");          
          client.print(pinOutRelay);
          client.print("\"}");            
          client.print("]}");                      
          break;
        case action_mypin_down:
          digitalWrite(pinOutRelay, LOW);
          client.print("{\"status\" : \"low\" , \"out\" : \"");
          client.print(pinOutRelay);
          client.print("\"}");                          
          break;          
        case action_mypin_up:
          digitalWrite(pinOutRelay, HIGH);
          client.print("{\"status\" : \"high\" , \"out\" : \"");
          client.print(pinOutRelay);
          client.print("\"}");                
          break;
        default:
          current_action = action_none;        
        }
       

        // ****************************************************            
       
         //clearing string for next read
         readString="";
         //stopping client
         client.stop();
       }
     }
   }
 }
}    



Pacman

Thank for reply,
I have the Arduno Duemilanove, and i've try your example, and is work fine with my Desire :)

The error was because I have the Arduino0017 instead of Arduino0021

bl4d3


Chill

Hey I've toyed a little with this stuff now but I can only turn thing´s on and not off again Can anyone help me?

it is as if the app on the fon do not know the code:? out = 5 & status = 0
what can it be?

quarbe

Change gate to light in the code.... yess, I was crazy too  ;D

bl4d3

yes you are right, a short list of the type available:

plug
light
door
gate
temperature
humidity
wattmeter

quarbe

Hello bl4d3, I have a question:

How I do to read from analog 0 and from digital otput 0??

String r_pinOutRelay_up_0 = "GET /?out=0&status=1 HTTP/1.1";
String r_pinAnalog0 = "GET /?out=0&status=1 HTTP/1.1";

?¿? Thanks!!

bl4d3

Nice shot :) i know this limitation and right now I can't implement a solution for it (no time), I can suggest you to send

out=10&status=1

to refer at analogic pin 0 and strip out the first char if the out paramenter is composed by 2 char, I know it's a workaround and I have to fix it on android side.

Thank you!

Go Up