Arduino Forum

International => Italiano => Megatopic => Topic started by: andrea86 on Jan 07, 2013, 12:04 am

Title: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 12:04 am
Ciao a tutti, tramite Arduino ho fatto questo cronotermostato completamente configurabile via internet tramite pagine web oppure applicazioni android/ios. Attualmente il sistema si appoggia su un web server su cui gira apache e mysql.

(http://imageshack.us/a/img22/3750/loginkh.jpg)

(http://imageshack.us/a/img708/5108/showz.jpg)

(http://imageshack.us/a/img405/7387/cronog.jpg)


L' utente, dopo essersi autenticato, può visualizzare le varie località a lui connesse e scegliere per ogni luogo la temperatura desiderata e la modalità di funzionamento ( spento / manuale / automatica ). Nella modalità automatica è possibile la programmazione di ogni ora per ogni giorno della settimana.

Sempre da remoto è possibile impostare l' orologio di sistema, la temperatura minima e massima e anche quanti gradi di isteresi da rispettare.

Per ora vengono usati arduino uno con ethernet shield + uno shield disegnato da me che ospita il DS1307 + batteria tampone e cristallo ( l' orologio di sistema ), il DS1624 ( sensore di temperatura ) e un 2N7000 ( un mosfet usato come stadio di potenza e ho aggiunto anche un condensatore da 100nF tra gate e gnd per evitare sfarfallamenti del relè ). Il relè, per questioni di sicurezza, ho preferito installarlo nel quadro elettrico ed è un Finder serie 34. Larghi solo 5mm si comandano a 5 Vdc e sono in grado di gestire 6A a 250 Vac. Inoltre nello zoccolo del relè è integrato il circuito di protezione oltre a quello di segnalamento.

Nel mio progetto ogni nodo arduino è indipendente e necessita solo dell' alimentazione locale ( fornita dal cavo ethernet ) per funzionare. Ad ogni accensione del micro vengono richiamati dalla memoria le ultime impostazione volute dall' utente. L' ora di sistema è fornita solo dal DS1307, però l' utente quando si collega è informato se tra l' ora dell' arduino e quella del web server c' è una differenza maggiore di 60 secondi. La comunicazione tra il web server e un nodo arduino è tramite richieste REST e le risposte sono in JSON. Attualmente ho implementato 8 richieste ( quelle con numerazioni dispari sono comandi per variare i parametri, mentre quelle pari informano sullo stato dei parametri ). Per ogni richiesta di variazione è prevista anche una richiesta di informazione sul parametro appena variato. Se la richiesta non è specificata, il micro risponde informando della temperatura ambiente / impostata / minima / massima e la modalità di funzionamento ( oltre ad indicare lo stato dell' uscita relè ).

Ad esempio una richiesta del tipo:
Code: [Select]
http://192.168.1.232/?76121
serve a programmare il cronotermostato che di Domenica dalle 12.00 alle 13.00 deve essere acceso il riscaldamento e genera la risposta:
Code: [Select]
[0,0,0,0,0,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
mentre una richiesta senza specifiche:
Code: [Select]
http://192.168.1.232
ha come risposta:
Code: [Select]
{"temp":24.06,"tSet":24,"tMin":15,"tMax":25,"mode":2,"info":0}
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: leo72 on Jan 07, 2013, 06:20 am
Complimenti bella cosa davvero.
Però perché il tuo progetto possa restare qui devi fornire tutti i sorgenti e gli schemi del lavoro nonché la documentazione, altrimenti va spostato in "Software".
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: menniti on Jan 07, 2013, 11:02 am

Complimenti bella cosa davvero.
Però perché il tuo progetto possa restare qui devi fornire tutti i sorgenti e gli schemi del lavoro nonché la documentazione, altrimenti va spostato in "Software".

Concordo con Leo. Andrea, mi associo ai complimenti ma ci siamo sempre dati la regola che questa sezione va usata come "condivisione" dei propri lavori, in modo che tutti possano usufruirne, così com'è tu stai facendo solo "vetrina". Comunque ti basta riaprire il Topic in Software e poi eliminare questo con il pulsante posto in basso a sinistra nella pagina "remove topic". Grazie. :)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 11:48 am
Ho aperto la discussione qui perchè credevo che era per i progetti funzionanti e non per richieste  :smiley-red:

Questo è il codice per arduino, non pensavo di pubblicarlo e quindi non è il massimo da leggere...

Quote

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

#define pinRele 14
#define defMode 1
#define defTMin 15
#define defTMax 25
#define defIsteresi 2
#define defCrono 1;

byte time[7], crono[168], mode, tMin, tMax, tSet, isteresi, info;
byte mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0xFF, 0x41 };
byte ip[]      = { 192, 168, 1, 232 };
byte gateway[] = { 192, 168, 1, 254 };
byte subnet[]  = { 255, 255, 255, 0 };
byte id[]      = { 1, 2, 3, 4 };
float temp;

EthernetServer server(80);

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  
  Wire.begin();
  
  // temperatura
  
  Wire.beginTransmission(0x48);
    Wire.write(0xAC);
    Wire.write(0x00);
  Wire.endTransmission();
  
  delay(100);
  
  Wire.beginTransmission(0x48);
    Wire.write(0xEE);
  Wire.endTransmission();
  
  // fine temperatura
  
  pinMode (pinRele, OUTPUT);
  
  mode = EEPROM.read(0);

  if (mode < 0 || mode > 2)
  {
    mode = defMode;
    EEPROM.write(0, mode);
  }

  tMin = EEPROM.read(1);

  if (tMin < 10 || tMin > 20)
  {
    tMin = defTMin;
    EEPROM.write(1, tMin);
  }

  tMax = EEPROM.read(2);

  if (tMax < 20 || tMax > 30)
  {
    tMax = defTMax;
    EEPROM.write(2, tMax);
  }

  tSet = EEPROM.read(3);

  if (tSet < tMin || tSet > tMax)
  {
    tSet = tMin;
    EEPROM.write(3, tSet);
  }

  isteresi = EEPROM.read(4);

  if (isteresi < 0 || isteresi > 3)
  {
    isteresi = defIsteresi;
    EEPROM.write(4, isteresi);
  }

  for (byte x1 = 0; x1 < 168; x1++)
  {
    crono[x1] = EEPROM.read(x1 + 5);
    
    if (crono[x1] < 0 || crono[x1] > 1)
    {
      crono[x1] = defCrono;
      EEPROM.write(x1 + 5, crono[x1]);
    }
  }
}

void loop()
{
  check();

  EthernetClient client = server.available();
  
  if (client)
  {
    boolean currentLineIsBlank = true;
    byte get[18] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    int x1 = 0;
    
    while (client.connected())
    {
      
      if (client.available())
      {
        char c = client.read();
        
        if (x1 > 5 && x1 < 24)
        {          
          get[x1 - 6] = c & 15;
        }  
        
        x1++;
        
        if (c == '\n' && currentLineIsBlank)
        {
        
          if (get[0] == id[0] && get[1] == id[1] && get[2] == id[2] && get[3] == id[3])
          {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connnection: close");
            client.println();
            
            switch (get[4])
            {                       
              case 3 : if (get[5] == 1)
                       {
                         x1 = get[6] * 10 + get[7];
                         
                         if (x1 >= 10 && x1 <= 20)
                         {
                           tMin = x1;
                           EEPROM.write(1, tMin);
                         }
                       }
                       
                       if (get[8] == 1)
                       {
                         x1 = get[9] * 10 + get[10];
                         
                         if (x1 >= 20 && x1 <= 30)
                         {
                           tMax = x1; 
                           EEPROM.write(2, tMax);
                         }
                       }
                       
                       if (get[11] == 1)
                       {
                         
                         if (get[12] >= 0 && get[12] <= 3)
                         {
                           isteresi = get[12];
                           EEPROM.write(4, isteresi);
                         }
                       }
              
              case 4 : client.print("{\"id\":");
                       client.print(id[0]);
                       client.print(id[1]);
                       client.print(id[2]);
                       client.print(id[3]);
                       client.print(",\"tMin\":");
                       client.print(tMin);
                       client.print(",\"tMax\":");
                       client.print(tMax);
                       client.print(",\"isteresi\":");
                       client.print(isteresi);
                       client.println("}");
                       break;
              
              case 5 : time[0] = get[9] * 16 + get[10];
                       time[1] = get[7] * 16 + get[8];
                       time[2] = get[5] * 16 + get[6];
                       time[3] = get[11];
                       time[4] = get[12] * 16 + get[13];
                       time[5] = get[14] * 16 + get[15];
                       time[6] = get[16] * 16 + get[17];
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 11:49 am
seconda parte ( tagliato in due per pubblicarlo )

Quote

                       Wire.beginTransmission(0x68);
                       
                       Wire.write(0x00);
                       for (byte x2 = 0; x2 < 7; x2++)
                       {
                         Wire.write(time[x2]);
                       }
                       Wire.endTransmission();
                       
              case 6 : getTime();
                       client.print("{\"ore\":");
                       client.print(time[2], HEX);
                       client.print(",\"minuti\":");
                       client.print(time[1], HEX);
                       client.print(",\"secondi\":");
                       client.print(time[0], HEX);
                       client.print(",\"gSettimana\":");
                       client.print(time[3], HEX);
                       client.print(",\"gMese\":");
                       client.print(time[4], HEX);
                       client.print(",\"mese\":");
                       client.print(time[5], HEX);
                       client.print(",\"anno\":");
                       client.print(time[6], HEX);
                       client.println("}");
                       break;
              
              case 7 : if (get[8] >= 0 && get[8] <= 1)
                       {
                         x1 = get[5] * 24 + (get[6] * 10 + get[7]);
                         crono[x1] = get[8];
                         EEPROM.write(x1 + 5, crono[x1]);
                       }
                       
              case 8 : client.print("[");
                       for (byte x2 = 0; x2 < 167; x2++)
                       {
                         client.print(crono[x2]);
                         client.print(",");
                       }
                       client.print(crono[167]);
                       client.println("]");
                       break;
                       
              case 9 : if (get[5] == 1)
                       {
                         if (get[6] >= 0 && get[6] <= 2)
                         {
                           mode = get[6];
                           EEPROM.write(0, mode);
                         }
                       }
                       
                       if (get[7] == 1)
                       {
                         x1 = get[8] * 10 + get[9];
                         
                         if (x1 >= tMin && x1 <= tMax)
                         {
                           tSet = x1;
                           EEPROM.write(3, tSet);
                         }
                       }

              default : check();
              
                        client.print("{\"temp\":");
                        client.print(temp);
                        client.print(",\"tSet\":");
                        client.print(tSet);
                        client.print(",\"tMin\":");
                        client.print(tMin);
                        client.print(",\"tMax\":");
                        client.print(tMax);
                        client.print(",\"mode\":");
                        client.print(mode);
                        client.print(",\"info\":");
                        client.print(info);
                        client.print("}");
            }
          }  
              
          break;
        }
        
        if (c == '\n')
        {
          currentLineIsBlank = true;
        }
        
        else if (c != '\r')
        {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

void getTemp()
{
  byte msByte;
  byte lsByte;
  
  Wire.beginTransmission(0x48);
    Wire.write(0xAA);
  Wire.endTransmission();
  
  Wire.requestFrom(0x48, 2);  
    if (Wire.available())
    {  
      lsByte = Wire.read();
    }  
    if (Wire.available())
    {
      msByte = Wire.read();
    }  
  temp = float(lsByte) + float(msByte >> 3) * 0.03125;
}

void getTime()
{
  
  Wire.beginTransmission(0x68);
  Wire.write(0x00);
  Wire.endTransmission();
  
  Wire.requestFrom(0x68, 7);
  
  for (byte x1 = 0; x1 < 7; x1++)
  { 
    if (Wire.available())
    {
      time[x1] = Wire.read();
    }
  }
}

void check()
{
  getTemp();
  
  switch(mode)
  {
    case 0 : digitalWrite(pinRele, LOW);
             info = 0;
             break;
             
    case 1 : if (temp < float(tSet))
             {
               digitalWrite(pinRele, HIGH);
               info = 1;
             }
             
             else if (temp >= float(tSet + isteresi))
             {
               digitalWrite(pinRele, LOW);
               info = 0;
             }
             
             break;
             
    case 2 : getTime();
             byte x1 = (time[3] - 1) * 24 + ((time[2] >> 4) * 10) + (time[2] & 15);
              
             if (crono[x1] != 0 && temp < float(tSet))
             {
               digitalWrite(pinRele, HIGH);
               info = 1;
             }
             
             else if (crono[x1] == 0 || temp >= float(tSet + isteresi))
             {
               digitalWrite(pinRele, LOW);
               info = 0;
             }
  }
}
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 12:02 pm
Ci aggiungo anche la pagina in .php che contiene la parte ajax per la visualizzazione dinamica dei parametri:

Code: [Select]
<?php

session_start();

if (!isset($_SESSION['id'])) {

header('location:session_expired.php');
exit;

}

else

$userId $_SESSION['id'];

$dbHostname "";
$dbUsername "";
$dbPassword "";
$dbDatabase "";

$con mysql_connect($dbHostname$dbUsername$dbPassword);

if (!$con)

die("Unable to connect to MySQL: " mysql_error());

mysql_select_db($dbDatabase$con) or die("Unable to select database: " mysql_error());

$sql "SELECT host.addr, host.proto, host.rqst, host.desc FROM host, rela WHERE rela.userId = " $userId " AND rela.hostId = host.id";

$result mysql_query($sql);

if (!$result)

die("Database access failed: " mysql_error());

$numRows mysql_num_rows($result);

mysql_free_result($result);

if (empty($_GET['place']))

$place 0;

else

$place $_GET['place'];

$sql "SELECT host.id, host.addr, host.proto, host.rqst, host.desc FROM host, rela WHERE rela.userId = " $userId " AND rela.hostId = host.id LIMIT " $place ", 1";

$result mysql_query($sql);

if (!$result)

die("Database access failed: " mysql_error());

$obj mysql_fetch_object($result);

mysql_free_result($result);

mysql_close($con);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="user-scalable=no, width=device-width, minimum-scale=1.0, maximum-scale=1.0" />
<title>ThermoWeb 1.0</title>
<link href="css/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">

var url = "get.php?addr=<?php echo $obj->addr?>&proto=<?php echo $obj->proto?>&rqst=<?php echo $obj->rqst?>";
var set;

function ajaxRequest() {

var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange = function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

var json=eval("("+xmlhttp.responseText+")");

document.getElementById("temp").innerHTML = Math.round(json.temp * 10) / 10 + "&deg;C";
document.getElementById("tSet").innerHTML = json.tSet;

switch (json.mode) {

case 0: document.getElementById("offOff").style.visibility = "hidden";
document.getElementById("onOff").style.visibility = "visible";
document.getElementById("autoOff").style.visibility = "visible"; break;

case 1: document.getElementById("offOff").style.visibility = "visible";
document.getElementById("onOff").style.visibility = "hidden";
document.getElementById("autoOff").style.visibility = "visible"; break;

case 2: document.getElementById("offOff").style.visibility = "visible";
document.getElementById("onOff").style.visibility = "visible";
document.getElementById("autoOff").style.visibility = "hidden";

}

switch (json.info) {

case 0: document.getElementById("info").innerHTML = "St-By"; break;

case 1: document.getElementById("info").innerHTML = "Run";

}

set = json.tSet;

if (set <= json.tMin) {

document.getElementById("mOn").style.visibility = "hidden";

}

else {

document.getElementById("mOn").style.visibility = "visible";

}

if (set >= json.tMax) {

document.getElementById("pOn").style.visibility = "hidden";

}

else {

document.getElementById("pOn").style.visibility = "visible";

}

}

}
 
xmlhttp.open("GET", url, true);

xmlhttp.send();

}

function setMode(val) {

var oldUrl = url;
url = url + "91" + val + "000";

ajaxRequest();

url = oldUrl;

}

function setTemp(val) {

var oldUrl = url;

if (val == 0)

set--;

if (val == 1)

set++;

url = url + "9001" + set;

ajaxRequest();

url = oldUrl;

}

window.onLoad = ajaxRequest();
setInterval(ajaxRequest, 1000);

</script>
</head>
<body>
<div class="container">
<h1><?php

        
if ($place != 0) {

echo '<a href="show.php?place=';
echo $place 1;
echo '">&lt;</a>';

}

else

echo '&lt;';

echo ' ' $obj->desc ' ';

if ($place $numRows) {

echo ' <a href="show.php?place=';
echo $place 1;
echo '">&gt;</a>';

}

else

echo '&gt;';

?>
</h1>
<div class="content">
<h1 id="temp">00.0&deg;C</h1>
<div class="barElements">
<h1>Set</h1>
<div id="mOff">
<a id="mOn" href="javascript:setTemp(0)"><img src="images/mOn.png" width="30" height="30" alt="-" /></a>
</div>
<h2 id="tSet">00</h2>
<div id="pOff">
<a id="pOn" href="javascript:setTemp(1)"><img src="images/pOn.png" width="30" height="30" alt="+" /></a>
</div>
</div>
<div class="barElements">
<h1>Mode</h1>
<div id="offOn">
<a id="offOff" href="javascript:setMode(0)"><img src="images/offOff.png" width="30" height="30" alt="Off" /></a>
</div>
<div id="onOn">
<a id="onOff" href="javascript:setMode(1)"><img src="images/onOff.png" width="30" height="30" alt="On" /></a>
</div>
<div id="autoOn">
<a id="autoOff" href="javascript:setMode(2)"><img src="images/autoOff.png" width="30" height="30" alt="Auto" /></a>
</div>
</div>
<div class="barElements">
<h1>Status</h1>
<h2 id="info">null</h2>
</div>
<div class="barElements">
<h1>Preferences</h1>
<div class="ico">
<a href="crono.php?hostId=<?php echo $obj->id?>"><img src="images/crono.png" width="30" height="30" alt="Crono" /></a>
</div>
<div class="ico">
<a href="#"><img src="images/pref.png" width="30" height="30" alt="Preferences" /></a>
</div>
</div>
</div>
<div class="footer">
<p>&copy; ThermoWeb <?php echo date("Y"); ?> | <a href="#">help</a> |</p>
</div>
</div>
</body>
</html>
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 12:06 pm
E lo script in .php più importante, serve come proxy per aggirare le limitazioni del ajax:

Code: [Select]
<?php

echo 
file_get_contents("http://".$_GET['addr'].":".$_GET['proto']."/?".$_GET['rqst']);

?>
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: menniti on Jan 07, 2013, 12:10 pm
Andrea, NON devi giustificarti, ti abbiamo spiegato una regola, ora tu hai completato la pubblicazione ed hai condiviso il tuo lavoro, non ti preoccupare della "bellezza", se qualcuno avrà dei dubbi ti chiederà, a questo serve aprire un Topic. Grazie!
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: leouz on Jan 07, 2013, 03:02 pm
complimenti d'avvero! ottimo lavoro!  :smiley-eek:
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on Jan 07, 2013, 03:20 pm
bel lavoro!

edit: non capisco bene il sistema che usi per comunicare i tempi di accensione (non ho visto il codice ma solo la stringa di risposta)

Se hai la precisione di un'ora e devi solo indicare acceso/spento, allora ti serve un array di 24 byte (1 byte per ora, dove i bit rappresentano i giorni: il bit 0 è il lunedì, il bit 1 il martedì, etc... e ti avanza pure un bit!) invece usi un array di 128 e non capisco il perchè
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: leo72 on Jan 07, 2013, 09:42 pm

1 byte per ora, dove i bit rappresentano i giorni: il bit 0 è il lunedì, il bit 1 il martedì, etc... e ti avanza pure un bit!

Per le festività  :smiley-yell:
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: leo72 on Jan 07, 2013, 09:43 pm

Andrea, NON devi giustificarti, ti abbiamo spiegato una regola, ora tu hai completato la pubblicazione ed hai condiviso il tuo lavoro, non ti preoccupare della "bellezza", se qualcuno avrà dei dubbi ti chiederà, a questo serve aprire un Topic. Grazie!

E sono ben felice anch'io della condivisione.

E ti do pure un suggerimento. Raccogli tutto dentro ad un unico archivio compresso così faciliti il download a chi volesse scaricare il tuo lavoro per replicarlo o prendere spunti.
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 10:06 pm

bel lavoro!

edit: non capisco bene il sistema che usi per comunicare i tempi di accensione (non ho visto il codice ma solo la stringa di risposta)

Se hai la precisione di un'ora e devi solo indicare acceso/spento, allora ti serve un array di 24 byte (1 byte per ora, dove i bit rappresentano i giorni: il bit 0 è il lunedì, il bit 1 il martedì, etc... e ti avanza pure un bit!) invece usi un array di 128 e non capisco il perchè


Ciao, se ho capito bene la tua domanda è come fa arduino a capire quale ora di quale giorno deve accendere il riscaldamento?

Lo script proxy in .php invia ad arduino "http://192.168.1.232:80/?123476121", dove 1234 è un controllo che ho aggiunto, non fa sicurezza ma evita risposte ad una richiesta che ha ricevuto erroneamente. Scusa nel primo post non c'era.
Il micro elimina già i primi 5 caratteri che sono GET/? e incomincia dal 6° a convertire i caratteri che seguono. Per la conversione sfrutto il fatto che in ASCII i caratteri numerici da 0 a 9 sono il valore BCD preceduto da "0011" e quindi uso il comando "c & 15" per mascherare i primi 4 bit dal MSB. Puoi anche usare int(c) e sottrarre 48 in decimale.

Per la gestione oraria/giornaliera uso un array da 168 elementi di tipo byte ( 24 ore x 7 giorni ) ed effettivamente spreco 7 bit per elemento. Però risparmio in cicli macchina o almeno credo! :D
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on Jan 07, 2013, 11:30 pm
bhe sicuramente risparmi in mal di testa :)

però tolto 1234 ti rimane 76121, sono 5 numeri mentre ci sono 7 giorni... cosa mi sfugge?

Quote
Puoi anche usare int(c) e sottrarre 48 in decimale.


char e byte sono la stessa cosa, puoi fare c-48 senza fare cast, al massimo ti becchi un warning :)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 07, 2013, 11:44 pm

bhe sicuramente risparmi in mal di testa :)

però tolto 1234 ti rimane 76121, sono 5 numeri mentre ci sono 7 giorni... cosa mi sfugge?

Quote
Puoi anche usare int(c) e sottrarre 48 in decimale.


char e byte sono la stessa cosa, puoi fare c-48 senza fare cast, al massimo ti becchi un warning :)


7 è per il case dello switchcase

6 è per il giorno della settimana dove lunedì = 0, martedì = 1 ecc fino a domenica = 6

1 e 2 sono decine e unità ricomposte e corrispondo alla fascia oraria 12.00 - 12.59

1 è acceso ( se 0 spento )
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on Jan 08, 2013, 12:05 am
ah ok, pensavo che impostassi tutto un giorno in un colpo solo. invece col sistema dei bit rappresentanti il giorno è comodo lato programamzione impostare tutti i giorni di un orario. Un pò antiintuitivo per un umano :)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: superlol on Jan 08, 2013, 05:52 pm
Consigli:
Nel setup magari metti una specie di client ntp così orari sempre perfetti ;-)
Poi non ho letto bene il codice (su un tablet é quasi impossibile) ma mi pare di aver capito che ogni volta salvi le programmazioni su EEPROM, avendo un PC a disposizione potresti fare una cosa lato server e mentre tieni delle programmazioni back up sulla EEPROM le altre le invia il server all'Arduino
Certo non hai un sistema indipendente ma potresti anche gestire ogni cosa secondo per secondo ed anche gestire più cose (luci, temperature, prese ecc) con poche modifiche al codice
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 08, 2013, 11:13 pm

Consigli:
Nel setup magari metti una specie di client ntp così orari sempre perfetti ;-)
Poi non ho letto bene il codice (su un tablet é quasi impossibile) ma mi pare di aver capito che ogni volta salvi le programmazioni su EEPROM, avendo un PC a disposizione potresti fare una cosa lato server e mentre tieni delle programmazioni back up sulla EEPROM le altre le invia il server all'Arduino
Certo non hai un sistema indipendente ma potresti anche gestire ogni cosa secondo per secondo ed anche gestire più cose (luci, temperature, prese ecc) con poche modifiche al codice


Per ntp ci avevo pensato, però non mi piace molto la libreria ethernet, non la trovo molto affidabile e meno la uso meglio è... però per aggiornare l' ora basta inviare una richiesta del tipo "http://192.168.1.232:80/?12345ssmmhhwddmmaa" e lo può fare uno script in .php

Per me la totale indipendenza di ogni nodo è veramente importante e la scelta di salvare ogni volta su EEPROM è praticamente obbligata.
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 10, 2013, 12:35 am
Come da richiesta via MP allego anche la parte di crono.php. Non l' ho pubblicata perchè non ancora completa.

Code: [Select]

        $json = json_decode(file_get_contents($url));

$cnt = 0;

for ($d = 0; $d < 7; $d++)

for ($h = 0; $h < 24; $h++) {

$prog[$d][$h] = $json[$cnt];
$cnt++;

}

$days = array("<p>Luned&igrave;</p>", "<p>Marted&igrave;</p>", "<p>Mercoled&igrave;</p>", "<p>Gioved&igrave;</p>", "<p>Venerd&igrave;</p>", "<p>Sabato</p>", "<p>Domenica</p>");

for ($d = 0; $d < 7; $d++) {

echo " " . $days[$d] . "\n";
echo " <table>\n";

for ($x = 0; $x < 24; $x = $x + 6) {

echo " <tr>\n";

for ($h = $x; $h < $x + 6; $h++) {

if ($prog[$d][$h] == 0)

echo ' <td>';

elseif ($arduino->gSettimana - 1 == $d && $arduino->ore == $h)

echo ' <td class="now">';

else

echo ' <td class="on">';

echo '<a href="crono.php?hostId=' . $hostId . '&day=' . $d . '&hour=' . $h . '&ena=';

if ($prog[$d][$h] == 0)

echo '1">';

else

echo '0">';

if ($h < 10)

echo '0';

echo $h."</a></td>\n";
}

echo " </tr>\n";

}

echo " </table>\n";

}
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: testato on Jan 20, 2013, 04:20 pm
Complimenti andrea per il lavoro e la condivisione.

due domande,
1. dovresti postare anche lo schema elettrico dello shield da te progettato, altrimenti resta cmq un progetto monco

2. secondo la tua esperienza (ed anche di altri che sono intervenuti), fare una cosa del genere tenendola tutta su arduino uno e' impossibile ? cioe' usando arduino+ethernet shield come webserver ?
Non intendo come funzionalita', che credo sia replicabile, ma come grafica (la tua mi piace molto), il 328+wiz ha le potenzialita' necessarie ?

2(B). se non si puo' con arduino uno, si potrebbe forse con la Due ?

grazie
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 20, 2013, 05:44 pm
Per la grafica non è un problema, è solo css e le icone ( orologio, +, - ecc ). Il problema è il database utenti<->località e password per l' autenticazione.
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 20, 2013, 05:47 pm
Code: [Select]
@charset "UTF-8";
/* CSS Document */

* {
margin: 0;
padding: 0;
}

body {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
background: #FFF;
color: #333;
}

a:link, a:visited, a:hover, a:active, a:focus {
color: #28B5F0;
text-decoration: none;
}

.container {
width: 300px;
margin: 30px auto;
text-transform: lowercase;
}

.container h1 {
text-align: center;
font-size: 30px;
}

.container form {
margin-top: 60px;
}

.container form label {
font-size: 14px;
color: #28B5F0;
display: block;
text-align: right;
width: 120px;
float: left;
margin-top: 6px;
}

.container form input {
margin-top: 4px;
margin-left: 20px;
font-size: 14px;
float: left;
width: 100px;
}

.container form button {
font-size: 14px;
clear: both;
text-align: center;
width: 150px;
height: 25px;
float: left;
margin: 30px 75px;
}

.container p {
font-size: 16px;
font-weight: bold;
color: #28B5F0;
margin: 20px 0 20px 3px;
}

.container table {
border-spacing: 2px;
}

.container table td {
width: 48px;
height: 48px;
text-align: center;
}

.on {
background-color: #28B5F0;
}

.on a:link, .on a:visited, .on a:hover, .on a:active, .on a:focus{
color: #FFF;
}

.content h1 {
font-size: 60px;
color: #28B5F0;
margin: 30px 0;
}

.barElements {
width: 125px;
float: left;
margin-bottom: 30px;
margin-left: 25px;
}

.barElements h1 {
font-size: 16px;
text-align: left;
color: #28B5F0;
margin: 0 0 5px 0;
}

#mOff, #pOff, #offOn, #onOn, #autoOn, .ico {
float: left;
width: 30px;
height: 30px;
}

#mOff {
background-image: url(../images/mOff.png);
}

.barElements h2 {
float: left;
font-size: 24px;
}

#pOff {
background-image: url(../images/pOff.png);
}

#offOn {
background-image: url(../images/offOn.png);
}

#onOn {
background-image: url(../images/onOn.png);
}

#autoOn {
background-image: url(../images/autoOn.png);
}

.ico {
margin-right: 30px;
}

.footer {
padding-top: 30px;
clear: both;
font-size: 12px;
text-align: center;
}
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on Jan 21, 2013, 12:43 am
quando usate il CSS, è buona cosa includere come file principale un foglio CSS detto reset, in pratica in quel foglio settate TUTTI gli elementi che usate con dei valori di default, in modo da non avere spiacevoli sorprese causate dai diversi valodi di default dei browser.
Ovviamente se cercate "reset CSS" trovate vari fogli già pronti, i più famosi sono quelli di Eric Meyer (http://meyerweb.com/eric/tools/css/reset/) e la YUI di Yahoo (http://yuilibrary.com/yui/docs/cssreset/)

BTW c'è anche l'altra parte della campana, pvvero perche NON usarei Reset CSS: http://meiert.com/en/blog/20080419/reset-style-sheets-are-bad/

A voi la scelta!
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: testato on Jan 21, 2013, 11:20 pm
grazie lesto del consiglio,
secondo te sulla questione database + password non ce la fa il webserver per l'arduino 1 ?
volendo usare un solo utente, quindi una sola password, c'e' cmq bisogno di un database ?
Credo sia molto interessante rendere uno di questi aggeggi autonomi, senza bisogno di un pc acceso, in modo da sostituire ad esempio un normale termostato
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on Jan 21, 2013, 11:30 pm
un database è un sistema per gestire più utenti contemporanei, ovvero la concorrenza nell'uso dei dati.

Poichè i dati li modifica arduino e non gli utenti, allora non servono lock, quindi arduino semplicemente salva il valore su file o eprom o variabile e lo stampa direttamente nell'HTML quando serve

edit: scusa intendevi memorizzare i dati che invece lui tiene nel DB/pc.

allora come fa lui no, non hai abbastanza ram, puoi usare la eeprmse basta o una SD, oppure uno dei primi post ho parlato di un sistema per ridurre assai l'uso della ram

Quote
Se hai la precisione di un'ora e devi solo indicare acceso/spento, allora ti serve un array di 24 byte (1 byte per ora, dove i bit rappresentano i giorni: il bit 0 è il lunedì, il bit 1 il martedì, etc... e ti avanza pure un bit!) invece usi un array di 128 e non capisco il perchè
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 21, 2013, 11:56 pm

grazie lesto del consiglio,
secondo te sulla questione database + password non ce la fa il webserver per l'arduino 1 ?
volendo usare un solo utente, quindi una sola password, c'e' cmq bisogno di un database ?
Credo sia molto interessante rendere uno di questi aggeggi autonomi, senza bisogno di un pc acceso, in modo da sostituire ad esempio un normale termostato


io ho utilizzato un sito in php + database perche l'idea e' che un singolo utente puo' gestire piu' arduini ( casa 1 casa, casa 2 ecc) ed ogni arduino puo' essere gestito da piu' persone...

inoltre per me un arduino e' un microcontrollore, non e' un microprocessore + un hd + un lettore dvd + una scheda video ecc :-)

questo progettino che ho fatto mi piace perche' se vuoi eliminare il server basta che scrivi una app per android o per quello che vuoi e il codice sull' arduino non deve essere cambiato di una virgola.

aggiungo che il server non devi averlo per forza in casa, puo' anche essere in india :-)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 22, 2013, 12:00 am

quando usate il CSS, è buona cosa includere come file principale un foglio CSS detto reset, in pratica in quel foglio settate TUTTI gli elementi che usate con dei valori di default, in modo da non avere spiacevoli sorprese causate dai diversi valodi di default dei browser.
Ovviamente se cercate "reset CSS" trovate vari fogli già pronti, i più famosi sono quelli di Eric Meyer (http://meyerweb.com/eric/tools/css/reset/) e la YUI di Yahoo (http://yuilibrary.com/yui/docs/cssreset/)

BTW c'è anche l'altra parte della campana, pvvero perche NON usarei Reset CSS: http://meiert.com/en/blog/20080419/reset-style-sheets-are-bad/

A voi la scelta!


nel file css utilizzato sono stati riscritti tutti gli elementi usati dal html, solo lo sfondo del box dove scrivi l' username e la password puo' non essere giallo crema ma bianco :-)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Jan 22, 2013, 12:14 am

un database è un sistema per gestire più utenti contemporanei, ovvero la concorrenza nell'uso dei dati.

Poichè i dati li modifica arduino e non gli utenti, allora non servono lock, quindi arduino semplicemente salva il valore su file o eprom o variabile e lo stampa direttamente nell'HTML quando serve

edit: scusa intendevi memorizzare i dati che invece lui tiene nel DB/pc.

allora come fa lui no, non hai abbastanza ram, puoi usare la eeprmse basta o una SD, oppure uno dei primi post ho parlato di un sistema per ridurre assai l'uso della ram

Quote
Se hai la precisione di un'ora e devi solo indicare acceso/spento, allora ti serve un array di 24 byte (1 byte per ora, dove i bit rappresentano i giorni: il bit 0 è il lunedì, il bit 1 il martedì, etc... e ti avanza pure un bit!) invece usi un array di 128 e non capisco il perchè



nessun dato proveniente da database e' usato dall'arduino e nessun dato usato dall'arduino e' salvato sul database.

per quanto riguarda le struct in byte e' un discorso molto interessante ma in questo caso il gioco non vale la candela... quante righe di codice ti servono in piu' x non usare un array di ben 128 byte... e quindi 0,168K sui 32K disponibili
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: testato on Jan 22, 2013, 03:36 pm
ho avuto l'onore di darti io il tuo primo Karma  ;)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: Fabio Battaglia on Feb 07, 2013, 01:33 pm
Ciao, bel progetto, io sto realizzando qualcosa di molto simile, con la possibilità di salvare la temperatura sul db per fare una piccola statistica
Quello che non ho capito dal progetto è un if, nel particolare:
Code: [Select]

        int x1 = 0
        ...
        ...
        if (x1 > 5 && x1 < 24)
        {         
          get[x1 - 6] = c & 15;
        } 
       
        x1++;
       


nell'array get vai a salvare la stringa "c" partendo dal 6 carattere che nel caso in esempio sarebbe 7 e poi 6121, quindi il get[0] è 7 e non 1 che servirebbe per il controllo (1234)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Feb 08, 2013, 12:02 am

Ciao, bel progetto, io sto realizzando qualcosa di molto simile, con la possibilità di salvare la temperatura sul db per fare una piccola statistica
Quello che non ho capito dal progetto è un if, nel particolare:
Code: [Select]

        int x1 = 0
        ...
        ...
        if (x1 > 5 && x1 < 24)
        {         
          get[x1 - 6] = c & 15;
        } 
       
        x1++;
       


nell'array get vai a salvare la stringa "c" partendo dal 6 carattere che nel caso in esempio sarebbe 7 e poi 6121, quindi il get[0] è 7 e non 1 che servirebbe per il controllo (1234)


No Fabio, hai capito bene. E' che tra il primo post e gli altri è cambiato il codice. Il controllo è stato inserito dopo. Ciao
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: testato on Feb 08, 2013, 10:53 am
un consiglio, quando aggiorni qualcosa al progetto aggiorna sempre il primo post, perche' resta di riferimento e non obbliga ad andarsi a leggere tutte le pagine  ;)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: veseo on Apr 03, 2014, 07:49 pm
Ciao Andrea,

mi accodo ai complimenti per il lavoro, anche l'interfaccia è molto pulita e rende bene. Se hai voglia, avremo bisogno di una persona che sviluppi e curi l'interfaccia HTML per il progetto Souliss. E' sempre un progetto di domotica basato su arduino ed ovviamente opensource.

Saluti,
Dario.
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: fabix68 on May 24, 2014, 01:42 am
Ma il progetto è stato abbandonato?
Ero interessato a realizzare qualcosa del genere, ho provato ad utilizzare i file allegati ma non capisco come creare il database mysql (struttura dei campi) .
Qualcuno mi "illumina"??
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on May 24, 2014, 02:50 am
cerca qualche guida SQL, è un linguaggio molto semplice
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: fabix68 on May 24, 2014, 07:33 am
Scusa lesto, ma qualcosa mi sfugge.
Ok per la parte sql, leggendo il codice si riesce a capire le strutture che dovrà avere il database, ma sempre nel codice trovo riferimenti ad immagini (es. mOn.png) che non trovo tra quanto presente nel post.
C'era qualche allegato andato perso o non sono mai state postate ?
Grazie
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on May 24, 2014, 12:50 pm
credo non siamo mai state postate. fattele date,tanto un immagine valel'altra, devi solo fare in modo cheti piaccia il risultato finale
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: fabix68 on May 26, 2014, 11:20 pm
Sto "cercando" di capire il funzionamento del sistema.
Tutto ok per quanto concerne la parte hardware e lo  sketch,  dopo una giornata di analisi sono riuscito a capirlo tutto, mi areno sulla parte WEB.
1° problema - > File Show.php  il file viene eseguito regolarmente ma analizzando la console di Explorer trovo un sulla seguente riga

Code: [Select]
var json=eval("(" + xmlhttp.responseText + ")");
Errore
Code: [Select]
SCRIPT1006: Previsto ')'
show.php, Riga 21 Carattere 5


2° problema, se ho capito bene il funzionamento della parte web, il file Show.php invia la richiesta (ip,porta,richiesta) al file Get.php che a sua volta dovrebbe inviarla al micro.
Questo 'purtroppo' non avviene. Ho provato a richiamare anche manualmente (da indirizzo web) il file get.php http://xxx.altervista.org/get.php?192.168.1.234&80&1234911000 ma non ho ottenuto nessun risultato. Se digito invece manualmente la stringa sul Browser (es. 192.168.1.234:80/?1234911000) tutto funziona regolarmente, il comando viene accettato e cambiato il modo di funzionamento.
Non riesco in sintesi a capire cosa fa questo codice
get.php
Code: [Select]
<?php

echo 
file_get_contents("http://".$_GET['addr'].":".$_GET['proto']."/?".$_GET['rqst']);

?>
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on May 27, 2014, 10:34 am
1. il debug fallo con firefox e/o chrome. quado funziona si aggiunge il supporto con IE, purtroppo IE è una brutta bestia perchè fa le cose a modo suo. Prima di tutto dobbiamo capire se l'errore è nel codice o se è di IE

2.
echo = stampa nella pagina
file_get_contents = da http://it2.php.net/function.file-get-contents " file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance.

    Note:

    If you're opening a URI with special characters, such as spaces, you need to encode the URI with urlencode(). "
quindi stai "sbagliando" perchè manca l'urlencode

"http://".$_GET['addr'].":".$_GET['proto']."/?".$_GET['rqst'] = prende i parametri get e chrea l'uri.

corretto dvrebbe essere

echo file_get_contents( urlencode("http://".$_GET['addr'].":".$_GET['proto']."/?".$_GET['rqst']) );
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: fabix68 on May 27, 2014, 08:17 pm
Purtroppo anche con la tua correzione il problema permane.

Puoi verificare anche tu.
Chiamando il file get.php con i seguenti parametri

Code: [Select]
http://fabix68.altervista.org/get.php?addr=79.27.114.175&proto=88&rqst=12349100

raggiungo il file ma questo non inoltra la richiesta al mio arduino.

Inserendo invece direttamente la stringa che la GET  dovrebbe evocare il sistema restituisce correttamente i valori

Code: [Select]
http://79.27.114.175:88/?12349100


Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on May 27, 2014, 08:40 pm
ahhh ok sembra che la funzione sia bloccata per questioni di sucerezza, posto la discussiopne che anche se vecchiota linka delle alternative

http://forum.it.altervista.org/php-mysql-e-apache-htaccess/97080-aprire-file-di-un-altro-sito.html
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: fabix68 on May 27, 2014, 09:47 pm
Lesto, sei un GRANDE, il problema era proprio il blocco imposto da Altavista.
Per la risoluzione ho dovuto modificare le impostazioni di protezione del sito e modificare il file che, per chi come me è ospite di Altervista, allego.
Vi ricordo che in ogni caso Altervista permette l'utilizzo solo delle porte 80 0 443.
File get.php
Code: [Select]

<?php
    $ch 
curl_init();
    
curl_setopt($chCURLOPT_URL"http://".$_GET['addr'].":".$_GET['proto']."/?".$_GET['rqst']);
    
curl_setopt($chCURLOPT_HEADERfalse);
    
$out curl_exec($ch);
    
curl_close($ch);
?>


permane l'errore del punto 1  "(var json=eval("(" + xmlhttp.responseText + ")");" nel file Show.php ma sembra non influire sul funzionamento del programma.

Lesto se vuoi dare un'occhiata

fabix68.altervista.org
User chiara
password 123456

ps non guardare le icone, sono state messe a caso giusto per evitare la generazione di errori

Grazie
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: lestofante on May 27, 2014, 11:17 pm
in teoria dice cheogni secondo parte una richiesta ajax.. però non ti so aiutare, lato JS e in particolare ajax e robacia simile non ne so quasi nulla :P

poi vedo che ogni tot fa una richiesta get, ma questa ci mette ben 15 secondi a rispondere...

imho c'èp qualche delay lato arduino che impalla tutto (oppure è il timeout perchè non vede arduino?), in ogni caso limiterei a 500/1000ms, e aumenterei di conseuenza il dealy del reaload ajax (che, non modificato, è il seguente):

Code: [Select]
window.onLoad = ajaxRequest();
setInterval(ajaxRequest, 1000);

Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: chicco83 on Sep 21, 2014, 02:27 am
Ciao a tutti,
qualcuno potrebbe condividere il pacchetto con tutti i file e lo sketch e la struttura del db?

grazie mille
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: leo72 on Sep 22, 2014, 02:35 pm
Tutti i file li ha solo l'autore ma pare sparito da un pò di tempo e non hai soddisfatto le richieste di pubblicare tutto in un unico archivo.  =(
La maggior parte del codice è stato postato nella prima pagina.
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: Fabio Battaglia on Oct 23, 2015, 01:02 am
Ciao a tutti,
dopo diversi mesi di smanettamenti vari, modifiche e diversi appelli ai santi del paradiso, ho finalmente completato il Thermoweb. Dato il tempo e aggiunte, lo definirei 2.0.
Rispetto all'originale non cambia tantissimo, ho aggiunto la funzione "senddata" per poter inviare dati a un db  ogni tot minuti, questo per poter monitorare nel tempo le temperature e per verificare se gli orari impostati hanno un reale beneficio nel tempo.
Inoltre ho aggiunto la pagina "stat" in cui si mostrano le ultime 12 misurazioni ma questo è modificabile in base al proprio torna conto.

Note:
1. dato che mi trovavo in casa un relé bistabile ho dovuto utilizzare due piedini dell'arduino per poter commutare la posizione. Nello script non l'ho ancora sistemata ma sarà fatto nel we

2. Nello script ho docuto abbassare la temperatura di 4 gradi perché a causa del riscaldamento della scheda il sensore percepiva una temperatura sbagliata. Inoltre quando ho provato a collegare l'alimentare POE la temperatura era salita anche di 12 gradi. Quindi ho alimentato tutto tramite alimentatore esterno

3. Non ho allegato il file sql per la tabella dove salvare i dati ma è uan tabella banalissima fatta di 4 colonne che potete ricavare dal file .ino o dal file temperature.php, naturalmente personalizzabile

4. i grafici della pagina stat.php rappresentano: sopra la temperatura percepita e la temperatura settata, sotto invece in grafico che mostra se il relé è acceso o spento
https://www.dropbox.com/s/hca79g4w871tc55/thumb_IMG_7285_1024.jpg (https://www.dropbox.com/s/hca79g4w871tc55/thumb_IMG_7285_1024.jpg)
https://www.dropbox.com/s/iayf9i1z8qpf0th/thumb_IMG_7286_1024.jpg (https://www.dropbox.com/s/iayf9i1z8qpf0th/thumb_IMG_7286_1024.jpg)
https://www.dropbox.com/s/h73agpnejdcwv35/thumb_IMG_7288_1024.jpg (https://www.dropbox.com/s/h73agpnejdcwv35/thumb_IMG_7288_1024.jpg)
https://www.dropbox.com/s/c8xrl8xvy0x37ft/IMG_7289.jpg (https://www.dropbox.com/s/c8xrl8xvy0x37ft/IMG_7289.jpg)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: FraMor79 on Dec 15, 2015, 09:11 pm
Siete avantissimoooooo!!!

Forse mi potete aiutare...

Io sono all'inizio di un progetto con qualche cosa di simile al vostro di cui ho parlato qua

http://forum.arduino.cc/index.php?topic=365985.0

Io non ho un web server ma mi servirebbe una grossa manona e consigli ;-)

P.S.
Scusate ma non ho la vostra esperienza e capacità sono novello :-)
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on Dec 15, 2015, 10:41 pm
Ciao, questa versione è vecchia ed è stata abbandonata da anni. Ciao
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: tommasov on Mar 23, 2016, 09:04 pm
Ciao ragazzi,

sto provando ad implementare thermoweb in casa mia.

Non ho capito bene però quali sono le tabelle da creare nel database mysql, che io ho su un server aruba assieme a spazio web.

Al momento ho caricato la tabella per il salvataggio della temperatura (ID, temp, tSet, info), non riesco però a capire che tabella serve per la gestione di thermoweb.

So che il progetto non viene toccato da anni, ma sembra talmente ottimo che mi piacerebbe provarlo.

Grazie
Title: Re: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql
Post by: andrea86 on May 20, 2016, 08:33 pm
A nulla, solo per essere multi sede. Però se lo devi usare solo x casa tua non ha senso disturbare un DB.

Effettivamente la versione in uso è molto diversa, ciao