Go Down

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

osaka

#330
May 29, 2012, 03:57 pm Last Edit: May 29, 2012, 04:01 pm by osaka Reason: 1

C'est vrai que le plus simple serai de pouvoir se passer de serveur externe, peut-être en stockant certaines données, et peut-être aussi les images, sur carte SD. Je n'ai pas vu d'exemple qui utilise la carte SD de l'Ethernet shield en même temps que l'Ethernet fonctionne en serveur web. Est-ce possible ?


Normalement c'est possible, je n'ai jamais essayé mais il y a eu un poste récent qui en parle justement.
http://arduino.cc/forum/index.php/topic,104855.0.html

Maintenant tout ça me semble assé lourd et peux adapté à nos peti µc s'il faut rajouter à celui ci toute la gestion domotique :~ .


Sinon il faudra que je m'oriente vers la solution d'un mini serveur web perso.


Comme dit précédemment pour moi l'arduino n'est bon que pour faire du minimaliste, la solution chico même si "légère" est déjà limite, donc les solutions externe à celui-ci sont inévitable si on veux aller plus loin, ou alors prendre plus performant tel que la futur DUE par exemple si on veux éviter les intermédiaires.
En solution externe il y a de petite plateforme qui arrivent tels que http://www.raspberrypi.org/ mais pas encore du 100% dispo.

Donc au final tout dépend des besoins, mais le choix est difficile j'en suis toujours à étudié les possibilités ...  :smiley-sleep:

zoroastre

Yep!

Dans mon optique, l'arduino n'est pas fait pour heberger un serveur web tel quel. Il faut effectivement s'orienter vers des solutions d'externalisation.
Pour ma part, j'ai plutôt opté pour une solution, certes fermée, mais qui correspond plus à mes besoins : développement d'une application complète et si possible portable.

Je ne me suis pas encore arrêté sur le langage de programmation et envisage de plus en plus de remplacer python par c++ ou java.

C'est aussi une des raisons qui me font pencher vers le double coeur tant la comm devient rapidement consommatrice de ressources et de temps.

@+

Zoroastre.
Gné! ;)

Brisebee

Bon donc je vais essayer de monter un serveur web avec un vieux noteboock sous XP avec Apache.

Je rédigé un peu rapidement, (il y a sûrement des erreurs et des oublis), le cahier des charges de l'unité de gestion avec notamment le transfert des données. J'ai considéré les deux hypothèses : avec serveur web externe ou interne, mais c'est vrai que la seconde hypothèse n'est pas évidente !
Je vous le soumets pour critiques et pour envisager des solutions.

@+

zoroastre

#333
May 29, 2012, 07:42 pm Last Edit: May 29, 2012, 07:54 pm by zoroastre Reason: 1
Yep!

Première remarque, tu peux déjà dissocier la gestion de l'horloge du serveur web. Un serveur ntp est justement fait pour çà.(vf librairie)

Tu émets l'hypothèse que l'arduino doit se renseigner régulièrement auprés du serveur web pour receuillir de nouvelles données. Dans l'idéal, un formulaire avec un bouton de validation informe l'unité de gestion que des nouvelles données sont disponibles. C'est à mon sens plus réactif ainsi.

Egalement, tu peux trés bien intégrer dans ton serveur web, un évenementiel indiquant au système de gestion qu'un utilisateur est entrer en mode paramétrage et renvoyer un echo de connectivité établi. De même pour la lecture des sondes...

Ainsi dans l'essentiel, l'arduino se contente la plupart du temps d'envoyer une trame contenant les informations in situ du système domotique (stats, logs, etc), c'est ici le principal interêt d'un serveur web.

@+

Zoroastre.
Gné! ;)

zoroastre

#334
May 29, 2012, 08:07 pm Last Edit: May 29, 2012, 08:11 pm by zoroastre Reason: 1
Yep!

Pour illustrer, dans mon logiciel, j'ai intégré 2 boites (login + mdp) --> envoi info à l'arduino = il y a un client + mise à jour en direct des sondes.

Lorsque je modifie un paramètre, le bouton validation remplie le buffer de sortie en attente d'expedition vers l'arduino (à la milliseconde prés)...



La trame grosso modo :

Code: [Select]
self.dicoParam = {'mode':'#', 'abs':'#', 'vac':'#', 't_jour':'#', 't_nuit':'#', 't_abs':'#', 't_vac':'#', 'cal':'#', 'day_at':'#', 'night_at':'#'}

(Le symbole '#' est ignoré par l'arduino)

Ainsi, une grosse portion du code est appelé uniquement à la demande.
En parallèle, j'envoie quelques logs à intervalles réguliers.

Pour info, dans ma version, un pc se charge de faire le proxy entre l'arduino et la liaison ethernet. Mais le principe est là pour le fond (ma prochaine étape est de communiquer en liaison direct sans le pc, donc j'y arrive aussi ;) )

@+

Zoroastre.
Gné! ;)

Brisebee

Merci Zoroastre, je vais voir tout cela, pour le moment je ne sais pas comment faire ce que tu proposes, mais je vais continuer à avancer pas après pas.

En prenant les problèmes les uns après les autres.

@+

zoroastre

Yep!

Je te rassure, j'ai aucune idée de comment faire ceci en php ou java. Nonobstant, qu'un interfaçe web peut trés bien intégrer ce que l'on appèle des scripts cgi écrit en python, ruby, c++ ou tout autre langage compatible.
Ces petits programmes agiront comme bon te semble et peuvent parfaitement travailler avec apache entre autre.

Je te recommanderais personnelement de travailler avec un langage que tu maitrises...aprés web ou pas web, c'est une question de gout.

Je reconnais tout de même que d'avoir des graphiques et un historique détaillé est un des avantages indéniable d'un hebergement externalisé.

Bon courage.

@+

Zoroastre.
Gné! ;)

osaka

#337
May 29, 2012, 08:54 pm Last Edit: May 29, 2012, 10:17 pm by osaka Reason: 1
Quelque schémas pour mieux visualiser les solutions.

Solution 1 : Hébergement du code html sur arduino.



Solution 2 : Hébergement du code html et javascript en externe sur du mutualisé, requête http à l'arduino via ajax.



Solution 3 : Hébergement du code html et javascript interne a son réseau, la communication avec l'arduino ce fait via requête http depuis le navigateur au serveur (ajax) et celui ci redirige les information via socket executé en php, java, ou autre vers l'arduino ...



Solution 4 : Hébergement du code html et javascript en interne ou en externe a son réseau, la communication avec l'arduino ce fait via websocket exécuté directement par le navigateur ce qui permet une liaison direct navigateur -> arduino.
Il est possible également de ce passé de bridge ethernet et de lié directement l'arduino au serveur via rs-232, la liaison et l'hébergement sera entièrement géré sur un serveur interne (1: fonctionnel chez moi)(2: adaptable également en solution 3).
(Quelque restrictions et pas fonctionnel pour la solution à droite actuellement du au handshake et masking)




Rappel : le code html et javascript sont interprété et exécute par le navigateur, le code php, java, c/c++, ..., par le serveur.

zoroastre

Yep!

Petite question au passage : On peut se créer un interface avec Pachube ou c'est plutôt fermé.

@+

Zoroastre.
Gné! ;)

Brisebee

Super Osaka.

C'est très bô !

En plus d'être clair.

A priori je pense m'orienter vers la solution 3.

Qu'en dis-tu ?

@+

osaka


A priori je pense m'orienter vers la solution 3.

Qu'en dis-tu ?


C'est la solution que j'ai présenté il y a quelques pages.
http://arduino.cc/forum/index.php/topic,80422.msg732055.html#msg732055

C'est une très bonne solution pour avoir une communication presque full-duplex et presque temps réel (enfin possible mais en chipotant).
Par contre c'est plus ou moin du chipotage, faut dribler entre les différents langages et bidouillages.  :smiley-mr-green:
C'est pour ça que j'ai choisi la solution websocket, liaison direct possible et moin chipotage intermédiaire, mais bon pas encore à 100% au point.

Brisebee


C'est la solution que j'ai présenté il y a quelques pages.


Je viens de jeter à nouveau un oeil, mais pour l'instant, je n'y comprends pas grand chose, il va falloir que je reprenne tous ces éléments au début, et commencer par faire des choses très simples pour comprendre.

Pour le moment je galère car j'essaye de passer un sketch simple qui lit un capteur OneWire DS18B20 et affiche la température sur un LCD, qui fonctionne très bien de l'IDE 023 à l'IDE 1.0, je n'arrive absolument pas à implanter la librairie OneWire, j'ai plein d'erreurs de compilation.

Je crois que je suis trop fatigué ce soir.
Je verrai demain soir.

osaka


Petite question au passage : On peut se créer un interface avec Pachube ou c'est plutôt fermé.


Alors là je ne serais pas te dire, je connais de nom mais jamais trop bien compris son intérêt, partage de données (capteur, temp, ...), graphique ???  :~
Mais :
http://arduino.cc/en/Tutorial/CosmClientString?from=Tutorial.PachubeClientString


Je viens de jeter à nouveau un oeil, mais pour l'instant, je n'y comprends pas grand chose, il va falloir que je reprenne tous ces éléments au début, et commencer par faire des choses très simples pour comprendre.


Il va falloir le faire pas à pas, on commencera par utilisé les requêtes http (get, post), puis les sockets, etc.


Pour le moment je galère car j'essaye de passer un sketch simple qui lit un capteur OneWire DS18B20 et affiche la température sur un LCD, qui fonctionne très bien de l'IDE 023 à l'IDE 1.0, je n'arrive absolument pas à implanter la librairie OneWire, j'ai plein d'erreurs de compilation.


Il n'y a pas màj de la lib ou autres, quelqu'un a ou va surement rencontré les même problèmes ?

Brisebee

Ca y est, j'ai effectivement trouvé une librairie à jour, ça marche !

D'abord, Je vais mettre au propre mon programme (enlever toutes les scories) essayer de faire un truc lisible, pour que je puisse partir sur de bonnes bases.

@+

Brisebee


Première remarque, tu peux déjà dissocier la gestion de l'horloge du serveur web. Un serveur ntp est justement fait pour çà.(vf librairie)


C'est d'accord, j'ai trouvé de l'info et des exemples => je mets cela de coté pour plus tard. => je vais modifier le cahier des charges en ce sens.


Egalement, tu peux trés bien intégrer dans ton serveur web, un évenementiel indiquant au système de gestion qu'un utilisateur est entrer en mode paramétrage et renvoyer un echo de connectivité établi. De même pour la lecture des sondes...


En fait pour éviter de stocker toutes les données (plages horaires + ...) => que j'estime à environ 2ko, dans l'arduino, j'ai imaginé n'en transférer que ceux nécessaires durant une périodes données par exemple 1 jour.
Mais en fait si je peux stocker ces données sur la carte SD, il n'y a plus de problème, je n'ai pas besoin d'avoir une connexion pour fonctionner.
J'aurai besoin d'une connexion pour connaître à distance les états du système et les grandeurs mesurées, mais du coup ce sera beaucoup plus simple => je vais là aussi modifier mon cahier des charges.

Encore merci pour votre aide.

Go Up