Go Down

Topic: Presentazione di ThermoWeb - Domotica IP - c/php/js/sql (Read 12123 times) previous topic - next topic

lesto

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 :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

superlol

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
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

andrea86

#17
Jan 08, 2013, 11:13 pm Last Edit: Jan 08, 2013, 11:19 pm by andrea86 Reason: 1

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.

andrea86

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";

}

Testato

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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

andrea86

Per la grafica non è un problema, è solo css e le icone ( orologio, +, - ecc ). Il problema è il database utenti<->località e password per l' autenticazione.

andrea86

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;
}

lesto

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!
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Testato

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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lesto

#24
Jan 21, 2013, 11:30 pm Last Edit: Jan 21, 2013, 11:34 pm by lesto Reason: 1
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è
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

andrea86


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 :-)

andrea86


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 :-)

andrea86


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

Testato

ho avuto l'onore di darti io il tuo primo Karma  ;)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

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)

Go Up