Proposition domotique Arduino sans shield Ethernet

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

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

Merci pour cette précision.

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

skywodd:
Tu te met le doigt dans l'œil jusqu'au coude, je peut te le garantir :wink:

Suis protégé, lunettes 8) :grin:.

skywodd:

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 :sweat_smile:) ...

skywodd:

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

skywodd:

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

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

skywodd:
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++.

skywodd:

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), ... :wink:

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

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é :grin: ).

skywodd:
.. là je crois qu'on s'éloignent sérieusement du sujet de départ :sweat_smile:

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

osaka:
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 :sweat_smile:) ...

:astonished: Si mon prof de programmation systéme te choppe ...
Tu passe par la fenêtre à grand coup de pied au c*l et tu fait huit fois le tour de la terre :grin:

POSIX = Standard = portabilité entre OS (... sauf sur ... windows :roll_eyes:, et encore je suis méchant une partie du POSIX est respecté)
voir POSIX — Wikipédia

Et humm ... la comparaison avec .net framework :roll_eyes:
On parle d'API bas niveau là (gestion du noyau, des processus, de la mémoire, ...) .net n'as rien à voir ...

osaka:
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. :sweat_smile:

Justement c'est pour améliorer le temps de génération des pages web que Zend a conçu un moteur PHP avec machine virtuelle.
C'est pas pour les applications CLI que le temps de lancement est critique, par contre pour les pages web on compte les millisecondes maintenant :wink:

osaka:
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°) .

En php les appels de fonctions "de base" de la libc sont appelé telle quelle, donc aucune forme de masquage à ce niveau.
Pour ce qui est des fonctions "toute prête" elle sont conçu par Zend, autant dire que niveau optimisation c'est autre chose que la team arduino :wink:
(Et puis vu le nombre de barbus et de sociétés qui injecte du fric dans PHP l'optimisation à l'heure du web 2.0 ça turbine !)

osaka:
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)

Depuis PHP 5.4 le typage stricte est possible, tu peut donc faire des programmes / fonctions avec des types prédéfini en dure.
Mais même en typage dynamique, la machine virtuelle de PHP optimise tellement les choses que souvent elle pré-détermine le type des variables.

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

... Oui là tu peut pas critiquer effectivement :grin:
PHP n'as pas besoin de 512Mo pour faire son job hein :grin:

osaka:
+++ c'est pas ce que j'appel naturel et simple. :grin:

Franchement, naturel certes pas trop, mais simple ... faire un programme poussé en PHP c'est "finger in the noise", débuggage en (quasi) temps réel avec Xdebug, fonctions toute prête pour beaucoup de chose (compression zip, bzip, manipulation d'image, etc ...), ...

osaka:
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++.

Oui mais en PHP t'as pas besoin d'include c'est le moteur PHP qui gère la listes des fonctions :grin:

osaka:
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. :sweat_smile:

Faut dire que je cherchai un peu la merde en utilisant les fonctions pour envoyer des chaines de caractéres ASCIIZ (le Z à la fin c'est pas pour rien) :wink:
En utilisant les fonctions de transfert binaire par buffer (genre socket_write) quelque chose me dit que ça marcherai beaucoup mieux :wink:
(C'est dingue le nombre de trucs/conneries/astuces que j'ai pu comprendre en une année d'IUT ...)

osaka:
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é :grin: ).

Et moi j'aime pas les gens qui aime pas POSIX et qui préfère java à PHP (en plus, ralala) :grin:

skywodd:
:astonished: Si mon prof de programmation systéme te choppe ...
Tu passe par la fenêtre à grand coup de pied au c*l et tu fait huit fois le tour de la terre :grin:

Sans problème j'en prend 5 à mon petit déjeuné, je suis plus poilus que lui je parie. :grin:

skywodd:
POSIX = Standard = portabilité entre OS (... sauf sur ... windows :roll_eyes:, et encore je suis méchant une partie du POSIX est respecté)
voir POSIX — Wikipédia

C'est bien ce que je dis, soit c'est portable ou pas, mais pas à moitier surtout quand c'est prévu à la base que pour unix, difficile donc de respecter le standard quand on s'appel microsoft ...

Ces standards ont émergé d'un projet de standardisation des API des logiciels destinés à fonctionner sur des variantes du système d'exploitation UNIX.

skywodd:
Et humm ... la comparaison avec .net framework :roll_eyes:
On parle d'API bas niveau là (gestion du noyau, des processus, de la mémoire, ...) .net n'as rien à voir ...

La comparaison était sur la portabilité et non sur le langage où la façon de le gérer en lui même évidement. :sweat_smile:

skywodd:
Pour ce qui est des fonctions "toute prête" elle sont conçu par Zend, autant dire que niveau optimisation c'est autre chose que la team arduino smiley-wink
(Et puis vu le nombre de barbus et de sociétés qui injecte du fric dans PHP l'optimisation à l'heure du web 2.0 ça turbine !)

Restons zend :stuck_out_tongue_closed_eyes: pour la comparaison avec la team arduino faut dire que j'ai pris l’extrême, mais bon à force de nous prémâcher le travaille on ne sais même plus ce que l'on fais réellement et ce qui ce cache derrière tout ça . :grin:

skywodd:
Depuis PHP 5.4 le typage stricte est possible, tu peut donc faire des programmes / fonctions avec des types prédéfini en dure.
Mais même en typage dynamique, la machine virtuelle de PHP optimise tellement les choses que souvent elle pré-détermine le type des variables.

Faudrait que je me donner la peine :grin: de prendre 5 min pour regardé une fois à ça. :sleeping: .

skywodd:
PHP n'as pas besoin de 512Mo pour faire son job hein :grin:

:astonished: On doit pas avoir la même JVM. :cold_sweat:

skywodd:
Oui mais en PHP t'as pas besoin d'include c'est le moteur PHP qui gère la listes des fonctions :grin:

Fainéantise ... comme tout bon développeur quoi ... :grin:

skywodd:
(C'est dingue le nombre de trucs/conneries/astuces que j'ai pu comprendre en une année d'IUT ...)

J'ai eu le même coup avec mon graduat et je partais de bien plus loin, la révélation quoi. :grin: :wink:

skywodd:
Et moi j'aime pas les gens qui aime pas POSIX et qui préfère java à PHP (en plus, ralala) :grin:

J'aime le X mais pas posé XD, java premier langage d'entreprise.
Maintenant il existe d'autre raison que la performance dans le choix d'un langage, aucun n'est réellement supérieure à l'autre et les comparés c'est débattre dans le vide, tout dépend des besoins. ;).

Un article intéressant sur l'utilisation conjointe d'un RPi et d'une Arduino

osaka:
Sans problème j'en prend 5 à mon petit déjeuné, je suis plus poilus que lui je parie. :grin:

J'imagine que pour le repas ça doit être quelque chose :grin:

osaka:
C'est bien ce que je dis, soit c'est portable ou pas, mais pas à moitier surtout quand c'est prévu à la base que pour unix, difficile donc de respecter le standard quand on s'appel microsoft ...

Windows is windows ... tout le monde respectent les standards sauf windows ...

Allez c'est lundi, j'ai le droit à mon troll quotidien :grin:

osaka:
La comparaison était sur la portabilité et non sur le langage où la façon de le gérer en lui même évidement. :sweat_smile:

Oui enfin bon c'est pas comparable même pour la portabilité puisse que .net framework 2.0 (et 3.0 il me semble) est porté sous linux / mac (via mono certes).

osaka:
Restons zend :stuck_out_tongue_closed_eyes: pour la comparaison avec la team arduino faut dire que j'ai pris l’extrême, mais bon à force de nous prémâcher le travaille on ne sais même plus ce que l'on fais réellement et ce qui ce cache derrière tout ça . :grin:

Je suis zenD :grin:
Non franchement le moteur Zend prémâche pas le travail plus que ça.
C'est comme utiliser la STL dans un programme C++, pourquoi réinventer la roue alors qu'un standard existe ?

osaka:
Faudrait que je me donner la peine :grin: de prendre 5 min pour regardé une fois à ça. :sleeping: .

Tu fera gaffe la doc sur les typages forts de php.net ne semble pas à jour.
Il y a encore la phrase "La spécification d'un type ne peut être utilisée avec les types scalaires comme int ou string." alors que c'est possible avec les dernières version de PHP.
(Oublie volontaire du fait que ce soit les dernières release, ou oublie non volontaire ... le mystère reste entier)

osaka:
:astonished: On doit pas avoir la même JVM. :cold_sweat:

Humour (et une pointe de troll poilu) :wink:

osaka:
Fainéantise ... comme tout bon développeur quoi ... :grin:

Un jour Bill Gates a dit :

I will always choose a lazy person to do a difficult job ...
because, he will find an easy way to do it.

Je pense que tu devrais reconsidérer : "Fainéantise ... comme tout bon développeur quoi" face à ce fait d'histoire :grin:

Merci à tous pour vos commentaires!
Bon j'étais parti sur le raspberry Pi qui me parraissait pas mal, mais en lisant la suite je crois que je me suis pommé tres loin la!!!
Du coup je penses que je vais faire des tests basics sur un vieux portable que j'ai et j'aviserai sur la faisabilité à mon niveau (ou avec l'aide d'autres personnes si il y a des motivés).
Je pensais m'y connaitre un peu en PHP, mais la je m'aperçois que j'ai encore du boulot!
Allez, je rassemble le matos et je me lance...
Je vous tiens au jus!

Je reviens un peu sur tout ce qui a été dit.
Moi je voyais la chose plus simplement : à chaque rafraichissement de page, on vérifie les états des interrupteurs, etc...
Du coup pas besoin de socket?
Ça ralentirait beaucoup l'affichage des pages? Un autre inconvénient?

nono056:
Moi je voyais la chose plus simplement : à chaque rafraichissement de page, on vérifie les états des interrupteurs, etc...
Du coup pas besoin de socket?
Ça ralentirait beaucoup l'affichage des pages? Un autre inconvénient?

C'est une solution simple et qui marche, pour l'affichage il ne sera que trés peu ralenti.

J'ai justement une connaissance sur twitter qui joue avec un raspberry pi + arduino :

Pas mal ça!!
T arriverais à avoir les sources?

Il suffit de suivre le lien YouTube et on tombe sur : http://pastebin.com/U7qKumMG

Ah ben m...e je ne l avais pas vu!
Il n à pas du s'afficher sur l iPhone... :wink:

Petite contribution pour ceux que ça peut intéresser : (Je suis tombé dessus dernièrement)

Marche super bien avec des prises télécommandées à 15e les 3 avec télécommande en plus...
Deux possibilités : soit on utilise la télécommande (montage pas très esthétique) soit on branche un petit émetteur en 433Mhz
Ça peut servir

nono056:
Pas mal ça!!
T arriverais à avoir les sources?

Suffit de regarder dans la description de la vidéo :wink:

barbudor:
Il suffit de suivre le lien YouTube et on tombe sur : http://pastebin.com/U7qKumMG

Je tient à préciser qu'il débute en PHP, en Raspberry et en Arduino.
Son code pourrait être réduit en une petite 50aine de lignes :wink:

Tient comme j'ai du temps à perdre :

void setup() {
  Serial.begin(115200);

  for (byte i = 2; i <= 13; ++i)
    pinMode(i, OUTPUT);  
}

void loop() {
  if (Serial.available()) {
    byte cmd = Serial.read();

    switch (cmd) {
    case '1': 
      Serial.println();
      for (byte i = 2; i <= 13; ++i)
        Serial.print(digitalRead(i));
      Serial.write(';');
      break;

    case '2': 
      for (byte i = 0; i < 24; ++i) {
        Serial.println();
        Serial.print("BOOT");
      }

    case 'a'...'l': // GCC only (Not C standard)
      byte pin = cmd - 'a' + 2;
      if (digitalRead(pin) == LOW)
        digitalWrite(pin, HIGH);
      else 
        digitalWrite(pin, LOW);
      break;
    }
  }
}

(Ps: code pas testé, je vais lui envoyer pour qu'il test)

bonjour,

vous avez ete bavard donc je n'ai pas tout lu

mais vous avez des solutions serveur-module qui existe en domotique au lieu de tout refaire

exemple : domotiga ou le recent mais prometteur domogic

vous pouvez lui adjoindre de smodules arduino sans problème
je pense que c'est plus pratique à distance en reseau pour la communication avec le pc (la carte est au plus pret et il n'y a que des fils rj45 à tirer)
et le travail appelé XPLduino est très intéressant

pour moi avec arduino le plus simple est de faire de smodules genre :
prise multiple telecommandée
module lumière/relaie
module volet roulant ....
avec une sonde de température sur chaque !

Hey c'est ma vidéo et mon code d'origine !
N'hésitez pas à vous abonner à ma chaine, j'avance bien là dans mon projet !
Et merci pour le code simplifié, même s'il ne retourne pas les états, je vais recoder un peu tout ça et m'inspirer des "for" :wink:
EDIT : Non rien, merci, tout marche, mais je dois recoder un truc car maintenant il vérifie si la porte est ouverte :smiley:

Hello!
Bon j'ai continué à travailler sur mon petit projet et voila ou j'en suis :
Je compte utiliser :

Deux cartes arduino (faites maison)

  • Une pour gérer les Inputs (J'y reviendrai plus tard)
  • Une pour gérer les Outputs (Allumage extinction lumières, fermeture volets, etc...)

Un PC portable pour l'instant (avant investissement dans un Raspberry py)
Sur celui ci je compte faire tourner :
Serveur PHP/Mysql (Et php serial)
Un daemon Python qui regarde tout ce que la carte arduino Inputs envoie et qui met à jour la BDD
Pourquoi pas la gestion d'un téléphone portable pour permettre l'envoi de SMS (testé et fonctionnel) et d'une connexion de secours 3G (A tester)

Pour avoir un retour d'état d'une lampe par exemple, je pense brancher une carte 230V->5V sans transfo (voir Electronique - Bases - Alimentations sans transfo) en parallèle sur le bornier de l'ampoule. Ensuite je tire un câble jusqu’à ma baie domotique et je le relie à ma carte Arduino (en fait surement sur des CD4021B). Si HIGH->lampe allumée.

Ormis la 3G, j'ai tout testé et ça à l'air de bien tourner. Il ne me reste plus qu'a cabler une lampe ou deux, un volet ou deux et voir ce que ça donne.

Que pensez vous de tout ça?

Des personnes intéressées pour m'aider à programmer tout ça de manière évolutive?
A+

Avez vous reussi la communication entre l'arduino et le raspberry en PHP?