Aidez nous ! Projet - Gestion domotique

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).
  1. 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.

@+

Cahier des charges détaillé du système domotique avec interface web ver. 1.0.pdf (713 KB)

Domo_RTC_LCD_PCF8574lib_UIA_PH_DS18B20_LED_SD.ino (23.7 KB)

Yop bribri, J'adore suivre l'évolution de ta solution et photos en prime :grin:, 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. ;)

Merci Osaka pour tes remarques.

Je vais corriger cela !

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

@+

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

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é ...

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

@+

Zoroastre.

zoroastre: 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. :drooling_face:

Yep!

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)

zoroastre:

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 .

zoroastre:
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. :grin:

Edit:

EDIT1 :

zoroastre:
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.

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

Yep!

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

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.

lol j'avais edit ton edit mais ça c'est recroisé donc je remet ici. :grin:

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

Bonjour à tous,

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

C'est normal ?

@+

Gromain59:
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”.

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 :

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 :

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!!!

Bonjour à tous,

Ça y est ! M'y voilà, le moment tant redouté, où il va falloir se jeter à l'assaut de la toile est arrivé !

J'ai réussi à tout faire fonctionner, hormis la communication avec un site web. J'ai même réussi à me connecter à un serveur NTP et lire le temps courant (c'est tout neuf), mais je n'ai pas encore intégré cette fonction dans mon programme global.

Je suis maintenant à la recherche de solutions pour, via le web : - pouvoir saisir et modifier des plages horaires (hh:mm)début et (hh:mm)fin - pouvoir modifier l'état de sorties (binaires) - afficher : l'état de sorties, d'entrées, des températures, des taux d'humidité, ... - (plus tard), stocker et exploiter (listes, courbes) des données issues de capteurs ou d'E/S.

Pour l'instant j'ai assez peu d'éléments complets (il y a pas mal d'exemples, mais rarement la partie arduino et la partie serveur web) sur le sujet de la communication avec le web.

Merci par avance pour votre aide.

Bonjour tout le monde, vraiment bravo à vous, super excellent topic XD, j’ai une remarque suggestion je préfère si vous permettez bien sûre XD, vu le nombre de pages important « oulala trop d’informations et d’idées :grin:», divers et parfois divergentes :roll_eyes: qu’elle reste vraiment très utiles, et vu le but de se topic et de mettre en place un style de cahier des charges plus ou moins générique avec des petite personnalisation pour chacun « tracer les grandes lignes quoi », je vous suggère de faire un break pour synthétiser tout les idées d’une manière méthodique, comme proposé par Skuzmitoo « uml ou autre », afin de synchroniser les idées. Une deuxième fois bravo Je suis ce topic avec grand intérêt @+

clouso007: vu le but de se topic et de mettre en place un style de cahier des charges plus ou moins générique avec des petite personnalisation pour chacun

L'idée de départ était de proposer différentes briques (modules) tant matérielles que logicielles pour que chacun puisse ensuite les assembler selon son besoin.

Mais cette idée est probablement trop utopique et/ou demanderait de partir sur des principes généraux communs. Très vite, au fil des discussions, nous nous sommes rendu compte qu'il était plus simple que chacun parte sur "sa" solution en échangeant et en partageant son expérience et en demandant de l'aide aux autres pour les parties qu'il maîtrise le moins.

Donc forcément les projets ont divergés, avancés à des rythmes différents, mais cela n'empêche pas l'échange et l'entre aide.

clouso007: je vous suggère de faire un break pour synthétiser tout les idées d’une manière méthodique, comme proposé par Skuzmitoo « uml ou autre »,

Synthétiser les discussions les plus intéressantes de ce topic (et d’autres) peut assurément rendre service à plus d’un. Mais c’est un travail de fourmi, c’est le genre de tâche que je confierai dans ma structure professionnelle à un stagiaire, comme c’est le cas de projets intéressants dont personne n’a le temps de s’occuper et qui ne présente pas un enjeu trop important.

@+

Brisebee: Mais cette idée est probablement trop utopique et/ou demanderait de partir sur des principes généraux communs. Très vite, au fil des discussions, nous nous sommes rendu compte qu'il était plus simple que chacun parte sur "sa" solution en échangeant et en partageant son expérience et en demandant de l'aide aux autres pour les parties qu'il maîtrise le moins.

Donc forcément les projets ont divergés, avancés à des rythmes différents, mais cela n'empêche pas l'échange et l'entre aide.

Donc ce topic n’aura plus lieu d’exister car les préoccupations sont divergentes ;) à murir

Brisebee: C’est le genre de tâche que je confierai dans ma structure professionnelle à un stagiaire.

Je pense que cette tache revient aux initiateurs du projet vu leurs expériences dans divers domaines et vu la complexité de la modélisation, pour que les débutants comme moi peuvent l'exploiter et démarrer sur des bonnes bases :D j’attends avec impatiente le fruit de ce topic et la réactions des autres :grin: @+

Yop BriBri,

Brisebee: Je suis maintenant à la recherche de solutions pour, via le web : - pouvoir saisir et modifier des plages horaires (hh:mm)début et (hh:mm)fin - pouvoir modifier l'état de sorties (binaires) - afficher : l'état de sorties, d'entrées, des températures, des taux d'humidité, ... - (plus tard), stocker et exploiter (listes, courbes) des données issues de capteurs ou d'E/S.

Pour l'instant j'ai assez peu d'éléments complets (il y a pas mal d'exemples, mais rarement la partie arduino et la partie serveur web) sur le sujet de la communication avec le web.

Ah mon avis une fois cette partie plus ou moin "maitrisée" via de simple exemples sans lien spécifique à ton projet, tu pourras revenir vers celui-ci plus tard.

clouso007: Donc ce topic n’aura plus lieu d’exister car les préoccupations sont divergentes ;) à murir

Je dirais que les préoccupations sont les même, ce sont les solutions pour y parvenir qui sont un peux divergentes. :grin: Enfin ici à chaque question posée par l'un donne une réponse également à l'autre ... :open_mouth:

Sinon j'essaierais de refaire une récap des différente solutions proposées vu l'avancement des un et des autres (bribri, zoro, etc) avec de zouli schémas ou diagrammes dès que j'ai le temps (ai repris une formation en électromécanique-maintenance industriel :grin:)