Presentazione di ThermoWeb - Domotica IP - c/php/js/sql

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

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

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

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 (CSS Tools: Reset CSS) e la YUI di Yahoo (CSS Reset - YUI Library)

BTW c'è anche l'altra parte della campana, pvvero perche NON usarei Reset CSS: Why “Reset” Style Sheets Are Bad · Jens Oliver Meiert

A voi la scelta!

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

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

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è

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

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

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

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 (CSS Tools: Reset CSS) e la YUI di Yahoo (CSS Reset - YUI Library)

BTW c'è anche l'altra parte della campana, pvvero perche NON usarei Reset CSS: Why “Reset” Style Sheets Are Bad · Jens Oliver Meiert

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

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

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

ho avuto l'onore di darti io il tuo primo Karma :wink:

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:

        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

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

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.

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

cerca qualche guida SQL, è un linguaggio molto semplice

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

credo non siamo mai state postate. fattele date,tanto un immagine valel'altra, devi solo fare in modo cheti piaccia il risultato finale

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

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

Errore

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

<?php

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

?>

  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

echo = stampa nella pagina
file_get_contents = da PHP: file_get_contents - Manual " 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']) );