Go Down

Topic: Aidez nous ! Projet - Gestion domotique (Read 152369 times) previous topic - next topic

Brisebee

#360
Jun 08, 2012, 10:33 pm Last Edit: Jun 08, 2012, 10:37 pm by Brisebee Reason: 1
Bonjour à tous,

Un petit point sur l'état d'avancement de mon projet : DOMOWEB 2012.

1) J'ai complété et amendé le cahier des charges qui deviendra le descriptif du système et de son fonctionnement, il va donc évoluer au fur et à mesure de l'avancement du projet (je joins à ce post la nouvelle version 1.0 du cahier des charges).

2) Le système fonctionne actuellement dans une configuration "minimale" : uniquement la partie arrosage, sans la connexion web.
C'est à dire :
- les paramètres (plages horaires) sont stockés sur la carte SD
- je capte la température à l'aide d'un capteur OneWire DS18B20.
- les sorties de l'unité d'interfaçage arrosage (module E/S en I2C) sont activées en fonction des plages horaires
il me reste à faire la partie stockage puis lecture des paramètres par défaut en EEPROM (je crois que c'est assez simple).

3) J'ai passé tout le sketch en .ino pour pouvoir travailler avec l'IDE 1.01, ça a été laborieux pour trouver les différentes bibliothèques, mais j'y suis arrivé (je joins le sketch).

J'aimerai maintenant commencer à faire des essais pour la partie web, mais je suis dans la posture de la poule qui a trouvé un couteau : je ne sais pas quoi en faire ! En fait je ne sais pas trop par où commencer.

Je joins également 2 photos du système actuel.

@+

osaka

#361
Jun 08, 2012, 11:44 pm Last Edit: Jun 08, 2012, 11:46 pm by osaka Reason: 1
Yop bribri,
J'adore suivre l'évolution de ta solution et photos en prime  :smiley-mr-green:, vivement que j'en sois aussi.
J'ai très rapidement parcouru ton code, juste une petite remarque concernant le type de variable.

Pour l'attribution des broches le type byte ou unsigned char suffit (1 octet) à la place de int (2 octet) pour des valeur n'excédant pas les 255 décimal, idem pour ton tableau de 120 pour la plage horaire de l'arrosage donc 120 octet de gaspillé  :~ .
Je regarderais attentivement la façon dont tu gère les plage horaire ça m'intéresse, faut que je réfléchisse également pour la gestion de scénarios, enfin j'ai déjà ma petite idée mais à étudier.
;)

Brisebee

Merci Osaka pour tes remarques.

Je vais corriger cela !

Et pour la partie web aurais-tu un conseil pour m'aider à  démarrer ?

@+

osaka


Et pour la partie web aurais-tu un conseil pour m'aider à  démarrer ?


A mon avis peut être commencer par de simple requêtes POST, GET, voir comment interagir avec l'arduino et y aller tout en douceur même s'il ne s'agira pas de la solution définitive et voir les différentes solutions qui peuvent s'offrir à toi ?
Je vais regarder un peux ce que je pourrais te proposer comme "exercices" ?

osaka

#364
Jun 11, 2012, 06:46 pm Last Edit: Jun 11, 2012, 06:48 pm by osaka Reason: 1
Yop Yop,
J'ai fais quelque testes hier pour voir les différentes solutions possible.

1) Simple requête http GET/POST

Transmission de la requête et récupération de l'entête http par l'arduino ensuite l'arduino retourne une simple entête avec redirection pour forcer un retour vers la page d'origine.

- marche parfaitement en local ou mutualisé
- pas de valeurs de retour possible en réponse à la requête

2) Requête ajax POST/GET vers l'arduino

Transmission de la requête directement à l'arduino, l'arduino envoie une ou des valeurs en retour de la requête.

- transmission de la requête marche parfaitement en local ou mutualisé vers l'arduino
- retour de valeur(s) en réponse à la requête impossible, le navigateur bloque toute entrée pour cause de faille xss possible si le chemin de destination est différent de celui qui en fait la demande ...

3) Requête ajax POST/GET redirection PHP/socket

Transmission de la requête vers une page php chargé de redirigé la requête entière ou partiel vers l'arduino via socket, l'arduino répond au socket avec valeur(s) possible, la page php répond à la requête originel avec les éventuels valeurs transmises par l'arduino.

- transmission de la requête, marche parfaitement en local ou mutualisé vers la page php
- socket impossible sur du mutualisé ... donc la requête ne peux être redirigé vers l'arduino
- marche parfaitement en hébergement local

4) Requête ajax POST/GET vers page PHP/cURL/HttpRequest/... ?

Pas tester ...

- demande l'installation de lib (HttpRequest,cURL, ...) qui manipule les sockets de toute fessons donc aucun avantage avec la solution 3.


Hé bien au final il n'y a qu'une solution possible si on veux du bidirectionnel, via socket et en local exclusivement ... parce que c'est soit l'hébergeur qui ne veut pas soit le navigateur qui bloque tout retour ...
Il reste également les websocket mais toujours pas standardisé ...

zoroastre

#365
Jun 11, 2012, 07:10 pm Last Edit: Jun 11, 2012, 07:20 pm by zoroastre Reason: 1
Yep!

Tu as oublié XAP (XPL)...

Bref description : http://laurentf.canalblog.com/tag/domotique%20arduino%20XAP%20protocol

+

http://www.xapautomation.org/index.php?title=xAP_Home_Automation_protocol

Un exemple : http://smhteam.info/blog/2011/06/17/arduino-controler-un-ruban-de-leds-rgb-avec-xpl-et-domogik-donc/

C'est pas toujours super documenté, cependant, le proto est plutôt à la portée de tous ;)

Gromain59 m'avait à une époque lancé sur le sujet...faudrait que je m'y rejette tantôt :smiley-mr-green:

@+

Zoroastre.
Gné! ;)

osaka


Tu as oublié XAP (XPL)...


Oui mais là il s'agit d'un protocole (langage ici) comme l'est le html, xml, plcbus, modbus, knx, ... que l'on peut diffusé quelque soit le moyen de transport, série, ethernet, usb, etc.
On peux parfaitement diffusé une requête xpl via socket ou requête http comme dans mes testes.
Le problème ici c'est comment échangé ses informations sur le réseau (tcp/ip ou udp) via requête http ou socket ?
Entre () au final tout est socket, même les requête http ce font via socket, il ne s'agit que d'une couche (un protocole) supplémentaire à destination du serveur afin d'échanger les informations d'un autre protocole (xap par exemple)  :~
Sinon pour xpl et arduino je ne suis pas un grand fan, du parsing de chaines de caractères c'est extrêmement lourd en processus et mémoire pour nos pauvre petit µc.  :smiley-fat:

zoroastre

#367
Jun 11, 2012, 08:41 pm Last Edit: Jun 11, 2012, 09:08 pm by zoroastre Reason: 1
Yep!

Quote from: Osaka
du parsing de chaines de caractères c'est extrêmement lourd en processus et mémoire pour nos pauvre petit µc


C'est aussi ce que l'on peut reprocher au html, si on pouvait se contenter d'envoyer une trame sans balises  contenant uniquement un entête, les infos avec séparateurs et une confirmation de fin de data, les choses seraient on ne peut plus simple.
Les solutions sont à priori d'utiliser un langage interprété afin de parser les infos vers les bonnes pages ou requettes.

Ne peut-on pas également et quel en est la difficulté, discuter directement avec une base de données genre sql ou access (via XML ou mieux JSON) ???

@+

Zoroastre.

EDIT1 : Tiens çà me rappelle qu'il y a un projet interessant nommé AJSON (arduino-json lib)
http://www.domotichome.net/tutorials/4-json-protocol-for-home/public_show
(les + : pas lourd et facilement interpretable)
Gné! ;)

osaka

#368
Jun 11, 2012, 09:13 pm Last Edit: Jun 11, 2012, 09:21 pm by osaka Reason: 1

Quote from: Osaka
du parsing de chaines de caractères c'est extrêmement lourd en processus et mémoire pour nos pauvre petit µc

C'est aussi ce que l'on peut reprocher au html, si on pouvait se contenter d'envoyer une trame sans balises


C'est exactement ce que je fais actuellement, tout du moin côté arduino de simple donnée binaire en réception et transmission c'est exactement le même protocole que celui que j'utilise sur le rs-485.
Maintenant dans la solution requête Http(navigateur) <-> serveur de contenu web/socket <-> socket/arduino  il y a quand même parsing ou autre au niveau serveur pour convertir la requête Http en donnée binaire mais bon ça limite fortement les ressource demandé à l'arduino et délégué plutôt celle ci au serveur qui lui est prévu pour.
Il reste encore la solution websocket que j'utilise actuellement webSocket (navigateur) <-> serveur de websocket (handshake,masking) <-> socket/arduino , il n'y a aucun parsing ou conversion à effectuer juste un "masking/unmasking" qui devrait être optionnel dans le futur normalement, les pages web en eux même pourront être hébergé en local ou extérieurement sur le websocket ne transiteront que les donnée utiles à l'arduino et gros avantage en plus l'arduino peut initié de lui même la conversassion et modifié le contenu web sans demande explicité côté navigateur .


Ne peut-on pas également et quel en est la difficulté, discuter directement avec une base de données genre sql ou access ???


Ici on peux parfaitement imaginés un client socket supplémentaire (php ou autre) directement associé à une base de donnée tel que mysql, sqLite, prosgreSql, ... là il faudra encore réfléchir.  :smiley-mr-green:

Edit:

EDIT1 :


Tiens çà me rappelle qu'il y a un projet interessant nommé AJSON (arduino-json lib)
http://www.domotichome.net/tutorials/4-json-protocol-for-home/public_show
(les + : pas lourd et facilement interpretable)


J'ai utilisé le format JSon dans mes solutions précédente.

http://arduino.cc/forum/index.php/topic,72035.0.html

uniquement côté navigateur de ce côté ci.
http://arduino.cc/forum/index.php/topic,80422.msg732056.html#msg732056

Le gros avantage c'est que le parsing est natif du côté javascript, donc ultra simple à interprété côté navigateur.

zoroastre

#369
Jun 11, 2012, 09:19 pm Last Edit: Jun 11, 2012, 09:21 pm by zoroastre Reason: 1
Yep!

Osaka, nos posts ont dûs se croiser, je refais un petit up sur AJSON et demande ton avis d'expert dessus  XD

Quote
Ne peut-on pas également et quel en est la difficulté, discuter directement avec une base de données genre sql ou access (via XML ou mieux JSON) ???

@+

Zoroastre.

EDIT1 : Tiens çà me rappelle qu'il y a un projet interessant nommé AJSON (arduino-json lib)
http://www.domotichome.net/tutorials/4-json-protocol-for-home/public_show
(les + : pas lourd et facilement interpretable)


@+

Zoroastre.
Gné! ;)

osaka

#370
Jun 11, 2012, 09:23 pm Last Edit: Jun 11, 2012, 09:27 pm by osaka Reason: 1
lol j'avais edit ton edit mais ça c'est recroisé donc je remet ici.  :smiley-mr-green:


Tiens çà me rappelle qu'il y a un projet interessant nommé AJSON (arduino-json lib)
http://www.domotichome.net/tutorials/4-json-protocol-for-home/public_show
(les + : pas lourd et facilement interpretable)


J'ai utilisé le format JSon dans mes solutions précédente.

http://arduino.cc/forum/index.php/topic,72035.0.html

uniquement côté navigateur ici, parser côté php.
http://arduino.cc/forum/index.php/topic,80422.msg732056.html#msg732056

Le gros avantage c'est que le parsing est natif du côté javascript, donc ultra simple à interprété côté navigateur.
Ca peut être une très bonne solution à ceux qui ne veulent pas gérer des données format binaire, de mon côté je préfère toujours évité les caractères et les chaines qui doivent de toute façons être reconvertie, mais bon c'est toujours une préférence perso.

Gromain59

Quote
Gromain59 m'avait à une époque lancé sur le sujet...faudrait que je m'y rejette tantôt


ouiii ?
je confirme que xPL (dérivé simplifié d'XAP) est assez gourmand en ressource.
Ceci dit, moyennant quelques astuces, on arrive à limiter la consommation de RAM. En placant les parties "fixes" des trames émises en mémoire flash par ex.
Pareil pour le parsing, en analysant la trame entrante caractère par caractère au lieu d'utiliser des fonctions type scanf, on utilise beaucoup moins de mémoire.

Pour ma part, comme mes modules xplduino doivent causer entre eux en exécutant des scénarios "évolués", j'ai mis au point un protocole plus léger, via UDP, composé d'un header et d'une partie data. Chaque trame pésera de 5 à 20 octets. Ce même protocole me permettra de configurer les modules à distance au moyen du manager (soft java), et pourra être transporté via RF ou RS485 par ex.
Que devient xPL alors ? C'est un protocole "haut niveau" donc, les états et commandes sont toujours traités et émis. Il sert aux échanges avec l'extérieur (IHM Domogik...)

Voila pour ma contribution au sujet (hors sujet ?)

Gromain
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Brisebee

Bonjour à tous,

J'ai essayé de suivre vos discussions sur le sujet, mais plus ça va, moins j'y comprends !

C'est normal ?

@+

osaka


Pareil pour le parsing, en analysant la trame entrante caractère par caractère au lieu d'utiliser des fonctions type scanf, on utilise beaucoup moins de mémoire.


Oui normalement c'est la solution la plus adapté à nos µc, c'est de faire un peux à la façon de "SAX" qui considère chaque balise '<' ou '>' ou ':' etc comme un évènement donc on ne prend que la partie correspondante à cette évènement en compte au fur et à mesure que l'on avance et non la totalité du document en un coup comme "DOM".

zoroastre

#374
Jun 11, 2012, 09:58 pm Last Edit: Jun 11, 2012, 10:06 pm by zoroastre Reason: 1
Yep!

Je pense que la difficulté première est d'évaluer chaque solution. Si c'est pour créer une seule page pour allumer une lampe, alors html + css suffisent.

Par contre, lorsqu'il s'agit de confronter les solutions pour une application plus large, comment justement évaluer ces solutions : ne vaut-il pas mieux écrire quelques 500 lignes de code arduino en plus afin d'avoir un proto évolutif et définitivement implanté...ou faut-il rester sur du cas par cas en mettant dans la balance Php, Ajax, xpl ou json.

Il est clair qu'un uC ne peut pas tout faire mais dans l'optique d'une solution userfriendly et extensible, je pense qu'un proto doit être on ne peut plus figé quelque soit le hardware.

@+

Zoroastre.

EDIT :
Quote from: Gromain59
ouiii ?

Je suis toujours partant, mais en ce moment, je suis sur çà : http://arduino.cc/forum/index.php?topic=104781.0
(En gros, je scinde la partie gestion IHM et ordonnancement. J'ai d'ailleurs quasiment terminé le dessin, quelques retouches artistisques et mise au point théorique des cartes filles.)

EDIT2 :

Quote from: Brisebee
J'ai essayé de suivre vos discussions sur le sujet, mais plus ça va, moins j'y comprends !

C'est normal ?

T'inquètes, je commence à être largué aussi...$£**%DOM...SAX!!!
Gné! ;)

Go Up