Go Down

Topic: Proposition domotique Arduino sans shield Ethernet (Read 6782 times) previous topic - next topic

nono056

Bonjour à tous!
Bon, je ne suis pas un expert en Arduino (et loin de la)
Je souhaite me lancer dans un projet de domotique avec Arduino à moindre frais (Comme beaucoup d'entre vous)
Je voulais juste poser une question, car je n'ai pas l'impression que ça a été soumis...

Que pensez vous de ça? : (les grandes lignes pour gagner du temps)
Brancher un ordi (portable de préférence pour avoir une batterie de secours) sur le réseau près du tableau électrique
Connecter l'arduino via USB dessus.
Ajouter tous les relais nécessaires (ou autre chose).
Créer un site Internet en PHP/MySql
Utiliser cette classe http://code.google.com/p/php-serial/ pour faire la liaison PC<->Arduino
Si le PC est en Linux, il y a possibilité de lire et écrire un flux Serial, si Windows, juste écrire
Pour la gestion de scénarios, il faudrait juste créer des taches cron...


Je le répète, ce n'est qu'une proposition et je ne l'ai pas (encore) vu sur le forum Arduino.
Je pense que ce n'est pas un projet hyper difficile mais je suis novice en Arduino et encore plus en domotique...
Par contre pour la partie PHP/MySql, je pourrai peut être aider!

nicolas34

Si j'ai bien compris, tu voudrais connecter une carte à base d'Arduino sur le réseau électrique d'une maison et contrôler le tout à distance ?

En effet, ça n'a pas l'air simple surtout que cela fait appel à différents domaines ! (réseau électrique, PHP, C ..)

Personnellement, je te conseillerai de commencer par des projets plus simples et avec des basses tensions (pour éviter de ramasser une chataigne !)

zoroastre

#2
Jun 22, 2012, 05:39 pm Last Edit: Jun 22, 2012, 05:43 pm by zoroastre Reason: 1
Yep!

Quote
Si j'ai bien compris, tu voudrais connecter une carte à base d'Arduino sur le réseau électrique d'une maison et contrôler le tout à distance ?


Tu as mal compris  XD

Le projet n'est pas trop compliqué et contrairement cela a déjà été fait. D'ailleurs, avant de distribuer un site web, la plupart des développeurs ont d'abord téstés chez eux, en local.

Pour ma part, mon installation domotique actuel est grosso modo dans cette architecture. Un arduino mega relié à un pc portable, quelques relais et sondes, ainsi qu'un afficheur tactile dans le salon.
Pour la gestion, j'ai plutôt opté pour une application écrite en python, portable sur clé usb et utilisable à peu prés n'importe où dans le monde grâce à l'utilisation de socket. Elle communique avec un proxy (pc/arduino) sur l'ordinateur portable et me permet ainsi de réguler mon chauffage central pour l'instant (différents modes : normal, vacances, hors-gel, calendrier, seuils de température, etc).

@+

Zoroastre.
Gné! ;)

chabot380

boujour

c'est l'idée que j'ai eu depuis un long moment.
Il y a un mais c'est la consommation de l'ordi de bureau ou portable !
Donc j'ai précommandé un raspberry pi un petit ordi aux performances suffisantes pour de la domotique.
La consommation de cette petite merveille ......  3,5 watt !!!!
J'attends la livraison, normalement mois de juillet.

http://linuxfr.org/news/le-raspberry-pi-est-arrive

chabot380
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

zoroastre

Yep!

Plus disponible et plus costaud, il existe aussi les plug-pc comme le sheevaplug ou le dreamplug.

http://www.newit.co.uk/shop/products.php?cat=5
http://www.newit.co.uk/shop/products.php?cat=21

Bon ok, c'est pas le même prix, mais c'est plus sérieux  XD

@+

Zoroastre.

Gné! ;)

nono056

Ok merci à tous!!!
Je crois que je vais continuer à réfléchir à tout ça et creuser les liens que vous m avez fourni!!

barbudor

Sur les sites de vente privées, genre "vent du diable" on trouve des fois des anciens modèles de netbook pour 130 à à 150€
Le gros avantage par rapport à un PlugComputer c'est que c'est du x86 donc tu fais tourner dessus un Windows XP ou un Linux standard.
Ca peut être moins de soucis pour l'install et le développement.
Notamment tu peux développer sur un vrai PC en natif et copier que les binaire.
Avec un PlugComputer qui utilise un proc. Marvell, il faut un environnement de dev croisé qui n'est pas forcément aussi simple a mettre en oeuvre que l'IDE Arduino...
J'utilise une recup de HP T5300 qui utilise un 586 (compatible Pemtium 1ère génération) et j'utilise une distri microcore Linux.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

osaka


Utiliser cette classe http://code.google.com/p/php-serial/ pour faire la liaison PC<->Arduino


Je l'ai testé récemment, pas réussis à le faire fonctionner correctement sous mac os.  :smiley-fat:
De plus il reste toujours le problème qu'en php on ne sais pas gérer les thread, donc soit on boucle sur la connections série et on ne peux rien faire d'autre presque (en dehors de cette boucle) même réceptionner une requête ..., soit connexion déconnexion constante pour vérifier s'il n'entre rien et celà provoque également l'auto reset de l'arduino à chaque connexion déconnexion du port série ...
Par contre je l'ai fais avec un serveur de web socket <-> serie en java et ça marche parfaitement (encore heureux puisque l'ide arduino utilise également la lib rxtx ...  :smiley-sweat:)
Pour de ce qui est du RaspBerry je pense que ce serait la bonne solution pour ceux qui aime chipoter, il en fait assé sans trop en faire niveau ressource, le seule problème c'est la dispo ...  =(

skywodd


De plus il reste toujours le problème qu'en php on ne sais pas gérer les thread, donc soit on boucle sur la connections série et on ne peux rien faire d'autre presque (en dehors de cette boucle) même réceptionner une requête ...

Oui mais non, en PHP sur les systèmes UNIX (mac devrait pouvoir le faire) il est possible de créer de "deamon" en PHP avec les fonctions posix (fork(), ...).
http://fr.php.net/manual/fr/ref.pcntl.php

Ensuite pour la communication entre les scripts PHP utilisateurs et le deamon PHP :
http://php.net/manual/fr/function.posix-mkfifo.php
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

osaka


Oui mais non, en PHP sur les systèmes UNIX (mac devrait pouvoir le faire) il est possible de créer de "deamon" en PHP avec les fonctions posix (fork(), ...).


Oui bien d'accord mais voilà php en lui même est incapable de le faire naturellement, ce n'est qu'un langage interprété et on en reviens toujours au même point, passer par des intermédiaires dont on ne peux maîtriser l'intégralité, chipotages, unix, etc, et pour finir on ce retrouve toujours avec pas mal de restrictions donc pas moyen de faire du multi process en toute "simplicité" ...
Pour moi php est seulement bon à jouer avec les chaines de caractères et faire des taches simple, étant un langage interprété c'est loin d'être optimal pour le reste, regarde les difficultés qu'on a eu pour avoir quelque chose de correcte avec les sockets dans nos projets (websocket, firmata, ...)  =( .

Bonjour, pour ce qui est de la classe php-serial je peut te donner mon retour. Elle est facile à utiliser mais il faudra parser toi même les retours à la lignes du serial. J'avais créer un petit programme arduino qui interprété les signaux IR d'une télécommande et les envoyé à mon ordinateur par le port série. Ensuite avec php-serial je pouvais revoir ces données et les traiter pour augmenter le volume, abaisser le volume et même le verrouiller par une combinaison de touches numériques.

Ensuite pour les threads j'ai tester cette class qui reprend ke principe énoncé par skywodd et te simplifie l'utilisation : http://blog.motane.lu/2009/01/02/multithreading-in-php/
Sache par ailleurs que j'ai déjà fais un serveur IRC en php capable de gérer beaucoup de monde à la fois et sans à avoir à interrompre aucune connections avec les clients. Le rapport avec toi c'est que PHP peut tourner dans une boucle sans avoir à checker le serial constamment, il peut aller jouer quelques secondes avec la BDD et revenir après, il y a un buffer interne à l'OS (ou PHP, j'avoue que je ne sais plus).

Dommage que mon PC fixe est un petit problème d'alimentation sinon je t'aurais envoyé volontiers quelques codes.

skywodd


Oui bien d'accord mais voilà php en lui même est incapable de le faire naturellement, ce n'est qu'un langage interprété et on en reviens toujours au même point, passer par des intermédiaires dont on ne peux maîtriser l'intégralité, chipotages, unix, etc, et pour finir on ce retrouve toujours avec pas mal de restrictions donc pas moyen de faire du multi process en toute "simplicité" ...
Pour moi php est seulement bon à jouer avec les chaines de caractères et faire des taches simple, étant un langage interprété c'est loin d'être optimal pour le reste, regarde les difficultés qu'on a eu pour avoir quelque chose de correcte avec les sockets dans nos projets (websocket, firmata, ...)  =( .

Tu te met le doigt dans l'œil jusqu'au coude, je peut te le garantir ;)

### PHP est naturellement POSIX sur les systèmes POSIX ...
Il n'est pas possible de rendre un systéme d'exploitation tel que windows POSIX juste pour PHP !

### Depuis PHP 5 avec le Zend Engine 2, PHP est devenu un langage semi-compilé.
Comme pour les programmes java, les programmes PHP sont compilé en bytecode, mis en cache, puis lors d'un appel au script c'est la version pré-compilé qui est exécuté.
cf : http://fr2.php.net/manual/en/internals2.opcodes.php

### La méthode de conception d'un programme multi-thread en PHP ou en POSIX est strictement identique.
Tu prend un programme posix, tu change les fonctions par leur équivalent PHP posix_xxx et ça fera exactement pareil.
De plus PHP peut tourner en ligne de commande (donc par forcément en mode "web"), et ça puissance d'optimisation en fait un des meilleurs langage de script possible (d'un point de vue performance PHP est très supérieur à python (même si je suis en grand fan de python je ne peut que le constater)).

### Si tu vois PHP comme du langage BASH linux qui ne fait que manipuler des chaines de caractéres c'est bien dommage.
Si tu avais une vue plus en profondeur des fonctions du moteur PHP tu serais surpris de voir qu'il est possible de faire des scripts PHP au capacités équivalente (voir supérieur) à un "vrai" programme C/C++, mais au lieu d'avoir +5000 lignes de code tu en aurais quelques 100aine optimisé à mort par le moteur PHP.

PHP 5.4 + mode CLI (ligne de commande) + POSIX = un programme en console unix tout ce qui as de plus classique.
La différence : en programmation C/C++ tu aurais pondu des centaines de lignes de code, inclut des dizaines de librairies, alors qu'en PHP il y aurai une fonctions de base pour cela.
Et comme les extensions PHP sont en langage natif (c/c++) les performances ne sont que trés peu diminué.
Seul point faible de PHP en CLI : pas d'interface graphique de base (comme python) mais des barbu du monde du manchot on portaient GTK en extension PHP.

### C'est vrai, sauf que lorsque j'ai codé EthFirmata et ArduinoRPC je n'était pas en IUT informatique. Je n'avais pas suivi des cours de programmation systéme (posix / linux bas niveau), de réseau (socket / protocole IP), ... ;)
Je suis sur que si je me replonge aujourd'hui dans mon code, l'erreur qui bloquait tout me sauterai au yeux (et la probabilité d'un ctrl+A supprimer serait de ~99%).

.. là je crois qu'on s'éloignent sérieusement du sujet de départ :smiley-sweat:
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

skywodd


Ensuite pour les threads j'ai tester cette class qui reprend ke principe énoncé par skywodd et te simplifie l'utilisation : http://blog.motane.lu/2009/01/02/multithreading-in-php/

C'est de la triche d'utiliser un classe tout prête :smiley-mr-green:


Le rapport avec toi c'est que PHP peut tourner dans une boucle sans avoir à checker le serial constamment, il peut aller jouer quelques secondes avec la BDD et revenir après, il y a un buffer interne à l'OS (ou PHP, j'avoue que je ne sais plus).

Pour le port série c'est au niveau du systéme d'exploitation qu'il y a une mémoire tampon.
sous windows (de base) le buffer est de 4096 octets, sous linux je crois que c'est dans le même ordre de grandeur.

Dans le même principe, pour les bases de données c'est au niveau de PHP que ce fait la persistance :
http://php.net/manual/fr/features.persistent-connections.php
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Merci pour cette précision.


Seul point faible de PHP en CLI : pas d'interface graphique de base (comme python) mais des barbu du monde du manchot on portaient GTK en extension PHP.


Et je peut te dire qu'elle fonctionne parfaitement. Je rédige d'ailleurs un tutoriel complet sur le site du zéro. Je n'avais pas beaucoup de temps avant mais maintenant que je suis en vacances j'espère pouvoir le publier pendant les vacances.

osaka


Tu te met le doigt dans l'œil jusqu'au coude, je peut te le garantir ;)


Suis protégé, lunettes  8)  :smiley-mr-green:.


### PHP est naturellement POSIX sur les systèmes POSIX ...
Il n'est pas possible de rendre un systéme d'exploitation tel que windows POSIX juste pour PHP !


C'est bien ce que je disais,POSIX=API=restrictions=chipotages, ... et surtout cantonné aux monde unix c'est pas plus portable que DotNet au final (! pas frappé j'ai pas dis ouvert, libre et blabla  :smiley-sweat:) ...


### Depuis PHP 5 avec le Zend Engine 2, PHP est devenu un langage semi-compilé.
Comme pour les programmes java, les programmes PHP sont compilé en bytecode, mis en cache, puis lors d'un appel au script c'est la version pré-compilé qui est exécuté.


Je savais pas, vu que je ne l'utilise que pour du contenu web, comme c'est ce pourquoi php était prévu à la base.  :smiley-sweat:


### Si tu vois PHP comme du langage BASH linux qui ne fait que manipuler des chaines de caractéres c'est bien dommage.
Si tu avais une vue plus en profondeur des fonctions du moteur PHP tu serais surpris de voir qu'il est possible de faire des scripts PHP au capacités équivalente (voir supérieur) à un "vrai" programme C/C++, mais au lieu d'avoir +5000 lignes de code tu en aurais quelques 100aine optimisé à mort par le moteur PHP.


Je l'avoue, je n'ai jamais eu l'envie de chercher plus loin en ce qui concerne php.
Pour les  100 ligne aux lieu de 5000 je comparerais ceci aux core arduino, c'est bien joli de facilité les choses et masquer la difficulté mais on ne peux pas optimisé une fonction ouverte aux différentes éventualités (d'où le fait que la team arduino utilise des tableaux de correspondance pin<-> n°) .
Enfin c'est un truc de fainéant quoi.  :smiley-mr-green:
Et le plus important à mes yeux c'est le typage dynamique de php,comment avoir quelque chose d'optimisé si tu ne peux pas savoir ou définir les type de variable à traiter ... (c'est pour celà que je ne suis pas un grand fan de python non plus)
D'un autre côté je ne peux pas trop critiqué les performances vu que ma préférence va vers java  :*, enfin là c'est juste que je privilégie le côté objet stricte.


PHP 5.4 + mode CLI (ligne de commande) + POSIX = un programme en console unix tout ce qui as de plus classique.


+++ c'est pas ce que j'appel naturel et simple.  :smiley-mr-green:


La différence : en programmation C/C++ tu aurais pondu des centaines de lignes de code, inclut des dizaines de librairies, alors qu'en PHP il y aurai une fonctions de base pour cela.
Et comme les extensions PHP sont en langage natif (c/c++) les performances ne sont que trés peu diminué.
Seul point faible de PHP en CLI : pas d'interface graphique de base (comme python) mais des barbu du monde du manchot on portaient GTK en extension PHP.


Les lib et extensions on ne peux pas y échapper quelque soit le langage tout dépend du besoin que ce soit en php ou c/c++. 


### C'est vrai, sauf que lorsque j'ai codé EthFirmata et ArduinoRPC je n'était pas en IUT informatique. Je n'avais pas suivi des cours de programmation systéme (posix / linux bas niveau), de réseau (socket / protocole IP), ... ;)
Je suis sur que si je me replonge aujourd'hui dans mon code, l'erreur qui bloquait tout me sauterai au yeux (et la probabilité d'un ctrl+A supprimer serait de ~99%).


Ici le principale problème était qu'un simple 0 te clôturait le socket ... l'échange simple de données binaire s'en est retrouvé compromise pour mon projet, encore une fois dans mon cas ça m'a tellement saoulé que j'ai pas cherché plus loin.  :smiley-sweat:

Enfin au final c'est comme pour tout langage, tout dépend de ses préférences et affinités (que je n'ai pas avec php on l'auras remarqué  :smiley-mr-green: ).



.. là je crois qu'on s'éloignent sérieusement du sujet de départ :smiley-sweat:


meuh non, il s'agit seulement de savoir si le sujet/projet est viable, apparemment oui donc il ne reste plus qu'a fournir le support.  :smiley-mr-green:

Go Up