Arduino yun cronotermostato con google calendar, PHP (risolto)

CIAO A TUTTI,

da un paio di settimane mi sto concentrando su un progetto che riguarda un cronotermostato comandato su google calendar.

Il mio intoppo adesso è come fare a mettere in codice il seguente:

google start : 2013 -01-31 from 15.00 untill 17.00.

io vado a leggere la data e l’ora con il processo time.

Ma non riesco a capire come faccio a tirare fuori un bool de sto dentro questo tempo.

Qualcuno sa come fare?

qui il mio codice completo:

#include <leOS2.h>
leOS2 myOS;

#include <dht.h>
// temp to SQL

#include <Bridge.h>
#include <HttpClient.h>
#include <Process.h>
Process date;



dht DHT;
#define DHT22_PIN 5

double gettemperature;
double getumidita ;

String settemp;
String setumid;
String setpoint;

bool togglereed = false;
bool togglesend = false;
bool togglecancella = false;
bool togglecontrollo = false; 
bool togglesensore = false;


// inizializzo le variabli per il crìontrollo del riscaldamneto
 String now;
 String data;
  String setdata;
  int ora;
  int minuti;
  
  // setpoint
  int setstartora;
  int setstartmin;
  int setendora;
  int setendmin;
  int settemperatura;
  
  bool accensione;








HttpClient client;




void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);
  if (!date.running())  {
    date.begin("date");
    date.addParameter("+%T");
    date.run();
  }
  Serial.begin(9600);
  delay (1000);
  // inizializzo i timer******************************************
  myOS.begin();
  myOS.addTask(timersensor, myOS.convertMs(1000),SCHEDULED_IMMEDIATESTART);
  myOS.addTask(timereed, myOS.convertMs(80000),SCHEDULED_IMMEDIATESTART); // +- 10 min
  myOS.addTask(timersend, myOS.convertMs(56000)); // 1 min
  myOS.addTask(timercancella, myOS.convertMs(128000)); // +- 20 min
  myOS.addTask(timercontrollo, myOS.convertMs(1000));
  
  //******************************************************************
  digitalWrite(13, LOW);



}

void loop() {
  controllo();
  cancella();
  getrss();
  send_temperatura();
  sensor();

}

// timer ************************************************************************************************************************************

void timereed() {
  togglereed = true;

}

void timersend() {
  togglesend = true;

}

void timercancella() {
  togglecancella = true;
}
void timercontrollo() {
  togglecontrollo = true;
}
void timersensor() {
  togglesensore = true;
}
//********************************************************************************************************************************************

// DATA E ORA SICURAMENTE DA RISCRIVEDE

//*********************************************************************************************************************************************
// data corrente
String getora() {
  Process date;
  date.begin("date");
  date.addParameter("+%T");
  date.run();
  if (date.available()) {
    String timeString = date.readString();
    return timeString;
  }
  date.close();
}
// **********************************************************************************************************

// ora corrente
String getdata()
{
  Process date;
  date.begin("date");
  date.addParameter("+%D");
  date.run();
  if (date.available()) {
    String timeString = date.readString();
    return timeString;
  }
  date.close();
}
String data_ora() {
  //************************************************************************************************************

  // metto a posto la data e l'ora per il DB
  String ora = getora(); //ora
  String dummy = getdata();
  String anno = dummy.substring(6, 8); // anno
  String data = dummy.substring(0, 5); // data
  anno = "20" + anno + "-"; // metto a posto l'anno
  data.replace("/", "-");
  data = anno + data;
  data += "%20" + ora;
  data.trim();
  //***********************
  return data;
}
//**********************************************************************************************************************************************



// temperatura al DB  ***************************************************************************************************************************
void send_temperatura() {

  if (togglesend == true &&  get_status() == true) {
    togglesend = false;
   // sensor();


    client.get("http://www.ilchetto.it/inserisci.php?tempo=" + data_ora() + "&temperatura=" + settemp + "&umidita=" + setumid);


    String risp;
    while (client.available()) {
      char c = client.read();
      risp += c;

    }
    risp.trim();


    if (risp == "dati inseriti") {
      digitalWrite(13, HIGH);
      delay (200);
      digitalWrite(13, LOW);
    }

    risp = "";


  }
}



//***************************************************************************************************************************************************

// Sensori ******************************************************************************************************************************************
void sensor()
{
  if  (togglesensore == true){

  int chk = DHT.read22(DHT22_PIN);

  settemp = String (DHT.temperature, DEC);
  setumid = String (DHT.humidity, DEC);
  togglesensore = false;
}
}


//*****************************************************************************************************************************************************

// Stato rete *****************************************************************************************************************************************
bool get_status()
{
  Process wifiCheck;  // initialize a new process

  wifiCheck.runShellCommand("/usr/bin/pretty-wifi-info.lua | grep Signal");  // command you want to run
  String risp;
  while (wifiCheck.available() > 0) {
    char c = wifiCheck.read();
    risp += c;
  }

  risp = risp.substring(7, 10);

  risp.trim();

  int con = risp.toInt();
  bool Status;
  if (con > 0)
  {
    Status = true;

  }
  else
  {
    Status = false;
  }


  return Status;
}


//*******************************************************************************************************************************************************
void cancella() {
  if (togglecancella == true &&  get_status() == true) {
    togglecancella = false;

    client.get ("http://www.ilchetto.it/cancella.php");
  }
}


// Google calendar FEED RSS ************************************************************************************************************************
void getrss()
{

  if (togglereed == true &&  get_status() == true) {
    togglereed = false;
    setpoint = "";
    digitalWrite(13, HIGH) ;
    client.get ("http://www.ilchetto.it/calendar.php");

    while (client.available()) {
      char c = client.read();
      setpoint += c;
    }
    setpoint.trim();
    //   Serial.println(setpoint);

    digitalWrite(13, LOW);

  }
}

//********************************************************************************************************************************************************
void controllo()
{
 

  if ( togglecontrollo == true) {
    togglecontrollo = false;
    if (setpoint == "spegni" || setpoint == "") {

      Serial.println("Spento");
      accensione = false;

    }
    else {
      now = data_ora();
     ora = now.substring(13, 15).toInt();
     minuti = now.substring(16, 18).toInt();
     data = now.substring(0, 10);


      // setpoint
      setdata = setpoint.substring(0, 10);
      setdata.trim();
      settemperatura = setpoint.substring(43, 46).toInt();
      // inizializzo a intero le ore e i minuti del setpoint
      setstartora = setpoint.substring(17, 19).toInt();
      setstartmin = setpoint.substring(20, 23).toInt();

      setendora = setpoint.substring(30, 32).toInt();
      setendmin = setpoint.substring(33, 35).toInt();


     
      accendi();
    }

  }
}


void accendi(){
 // sensor();
  if ((data == setdata)&&  (((ora >= setstartora)&& (minuti >= setstartmin))||(( ora <= setendora ) && (minuti <= setendmin)))){ 
 Serial.println ("ciao");
       }
   
   
}

Per favore riedita il tuo post includendo il codice con i tag CODE come indicato al punto 7 del Regolamento del Forum.

Per il confronto ti conviene trasformare tutto in secondi.

unsigned long TotSec = Ora*3600 + Minuti*60 + Secondi;

Cosi in pratica puoi fare il confronto tra 2 numeri.

Ora non so se con Linino sia possibile ottenere dal processo Date il Timestamp NTP. Semplificherebbe molto le cose.

Grande funziona

Ciao chetto983; avrei in mente un progetto simile al tuo ma sono um vero neofita. Mi puoi spiegare come hai realizzato la tua idea? (Materiali, collegamenti etc) Grazie

Certo,

eccoti la cartella del progetto:

https://drive.google.com/folderview?id=0B7sIUUQmragBRkE1enBlYWRaUHM&usp=sharing

a disposizione per chiarimenti

Doo 6 mesi in test tutto funziona senza crash software e hardware sistema veramente stabile. Adesso penserei di mettere tutto in bella e vedere la commerciabilità del prodotto.

A qualcuno interesserebbe il progetto?