Domotique barbare

Bonjour bonjour!

J’ai un petit problème avec la programmation web, je suis bloqué!

Je vous explique le contexte :
-Je suis en chambre universitaire, donc wifi Universitaire… (pas moyen de modifier les paramètres de la box!). Ce qui m’empêche pas de bricoler!

Je me suis mis un projet en tête :
J’ai une carte arduino qui sait en temps réel pas mal de chose sur ma chambre, état des lumières, de la porte, de l’alarme (maison), …
Et qui peut aussi contrôler les lumières donc, et l’alarme tant qu’à faire!

L’arduino étant en usb sur mon ordi, un joli programme en C sur mon pc tourne en permanence en récupérant les infos que lui envoie ma carte! Wamp (serveur web) tourne lui aussi, et le site que j’ai fait est capable de dialoguer avec tout mon système via mon programme en C! En gros tout fonctionne à merveille!

Sauf que…
Mon téléphone (qui est connecté sur le wifi de la cité que je réémet de mon pc) a chargé le site web (en wifi donc) et contrôle sans problème ‘ma chambre’!
Ce que j’aimerai c’est pouvoir “ouvrir” mon site, me connecter à partir du réseau 3G, ou bien chez un pote, n’importe où il y aurai internet! Pas en local donc! J’ai vu qu’il était possible “d’ouvrir” wamp sur le net (ce que j’ai fait dans ma vraie demeure) mais il à fallu que je modifie un peu la configuration de base de ma box!
Ici, je n’y ai donc pas accès!

J’ai pensé à une solution qui me parait un peu… disons barbare. je pourrait héberger mon site web et enregistrer tous les paramètres sur un fichier texte sur le ftp de mon hébergeur? Et récupérer ce fichier via une commande sur mon pc pour le décortiquer et appliquer! Sauf que le temps qu’il se connecte au ftp… c’est trop de temps perdu je trouve, ça ferai surtout beaucoup trop de connexion, et un temps de ré-actualisation énorme.

Avez vous une autre idée? Un script en php qui dialoguerai avec mon pc en temps réel depuis un hébergeur?

Merci beaucoup d’avoir porté une attention à un pauvre bricoleur!

Romain.

Pas besoin de ftp. Expose un webservice sur ton site extérieur (SOAP ou REST), et ton site local l’appelle à intervalles réguliers pour transmettre les nouvelles valeurs et récupérer les éventuels ordres.

C’est pas du temps réel, mais si tu mets un intervalle de polling suffisamment court (genre 1 ou 2 secondes) ça devrait suffire.
Edité le 15/11/2012 à 13:25

Bah dans ce cas, tu peux aussi te connecter au serveur distant et conserver la connexion ouverte.

:oui:

Juste un poil plus compliqué à mettre en place. Surtout s’il a un hébergement mutualisé.

Ouais :slight_smile: Mais si c’est un serveur hébergé chez ses parents, son pote, etc, y a pas de soucis. Mais là, c’est uniquement pour du temps réel.

Merci beaucoup!
Et non le serveur utilisé n’est pas à moi!
Un hébergeur!

Je vais regarder les histoires de webservice!

Romain


Par compte je connais pas du tout ce .. SOAP ou REST !

Je vais me renseigner, internet regorge d’information!

En gros, si on vire tous les buzzwords, fais juste une page php qui prend des paramètres et renvoie des résultats :smiley:

Mh, oui mais comment renvoie t’elle les résultats?
Une commande en php du serveur c’est possible mais qui pointerai vers quoi? L’adresse ip de mon ordi?
Et coté ordi, qui récupère les infos?

Elle pointe vers rien du tout ta page php. Tu fais une page php qui prend en paramètre toutes les informations que tu veux remonter (état des lumières, portes…) et qui renvoie les éventuels ordre (éteindre la lumière…). Cette page sera appelée à intervalles réguliers par ton serveur local, et uniquement par lui. La page php stocke les informations en base de données.

A côté, tu as une deuxième page php qui permet d’afficher ces informations (en les lisant depuis la base) et de donner des ordres. Quand tu donnes un ordre, il est stocké en base, et ton serveur local le recevra la prochaine fois qu’il interrogera la première page.

Mon serveur local, wamp ?

Je peux pas accéder à ma base de donnée en exterieur, malheureusement! C’est ça dont tu parles?

Bon, j’ai résolu un bout de mon problème, j’ai trouvé une base de donnée qui peut etre accessible de n’importe quelle ip!
Donc j’ai plus qu’a trouver un hébergeur qui… autorise la connexion vers une bdd externe…
Une idée?

Mh, a chaque tentative de connexion à la base j’ai un message de ce type:
Erreur : SQLSTATE[HY000] [2005] Unknown MySQL server host ‘******************’ (3)

Ca marche tres bien avec wamp par contre!

Tu ne peux pas accéder à la base mais tu peux accéder au site extérieur, qui lui peut accéder à la base.

Tu veux dire que je ferai remplir des champs automatiquement par mon site local sur le site web?
Je vois pas où tu veux en venir… On peut faire dialoguer deux site? De quelle facon?

Bah, ce qu’il veut dire, c’est qu’à partir du moment où depuis un navigateur web installé sur ton téléphone (ou en tout cas, basé sur le wifi de ton école) tu peux contacter un site web, alors un programme - autre que ton navigateur - peut aussi contacter un site web.

Ensuite, tu peux envoyer des données - tout comme tu envoies un formulaire - et le site web peut les interpréter.

Remplace le programme qui envoie les données par ton application écrite en C, le site web en wamp par une site web sur un serveur quelconque, et tu comprendras je pense comment tu peux faire :wink:

Alors par contre la communication sera que dans un seul sens (ie: ton programme en C vers le web), et tu ne pourras pas éteindre la lumière depuis l’application web, car il faudrait que celle-ci (située à l’extérieur du réseau scolaire) puisse contacter ton programme en C.

Si tu veux faire comme ça, faut qu’en gros ton application C se connecte sans fermer la connexion (via les fonctions système comme connect()). Mais dans ce cas, faut que tu ai la possibilité de le faire sur le serveur distant, ce qui n’est pas forcément possible sur tous.

Et pour faire plus réseau, en fait quand tu as un ordinateur connecté à un routeur (ici, ton téléphone connecté au wifi de ton école), y a des ouvertures & redirections de ports implicites qui sont faites : quand tu veux aller sur clubic.com depuis ton téléphone, tu n’as pas besoin d’aller sur le routeur et d’ouvrir le port 41475 (à supposer que c’est celui utilisé par le navigateur !) pour t’y connecter, au contraire, cela se fait tout seul.

L’inverse n’est pas vrai (ie: si tu veux pouvoir accéder au port 80 de ton application, il faudrait ajouter une redirection de port sur le routeur, de sorte à ce que les requêtes dirigées vers l’ip du routeur / port donné soient redirigées en interne vers ton ip / port donné [note: c’est pas parce qu’en local tu as du port 80 que l’extérieur est forcé d’utiliser le port 80]).

Merci tout le monde! Je viens de trouver comment piloter ma carte via le web!
Une petite vidéo ici et j’explique!
www.youtube.com…

Bon, mon pc avec le site web ouvert (fond jaune, sur mon lit!), ce site web à un bouton “light” j’ai fait un truc simple pour les tests! Quand on clique sur ce bouton, une base de donnée est alors mise à jour
(état light 1 ou 0) et un banal fichier texte (light.txt) est créé sur le serveur ou supprimé suivant l’état précédent!

De la, mon pc (sur mon bureau, le vieux) à deux script lancé. Celui en plein écran ca télécharger mon fichier light.txt du serveur et l’enregistrer dans le dossier! Si jamais le fichier n’existe pas, mon site redirige vers un index.html (page d’erreur), et c’est celle ci qui va etre téléchargée a la place!

L’autre script est en C, il va regarder si “light.txt” éxiste dans le dossier de telechargement, si oui il envoie sur le port COM de quoi allumer ma led (sur l’arduino), et il supprime le light.txt!
Si il trouve index.html il fait la meme chose, il envoit de quoi éteindre la led, et il supprime index.html!

C’est un peu barbare mais ca marche!!