Thermostat via Internet avec Arduino Yun, DHT22 et relais

Bonjour,

Le projet est presque terminé, il est en phase de test. Il restera à installer le ou les relais et à réaliser le montage final. Ce thermostat est dédié à une maison de campagne et devra travailler en // avec le thermostat présent (Theben 797b avec 2 piles).
La réalisation utilise un Arduino Yun, une sonde DHT22 et 3 diodes led (verte, jaune, rouge). Actuellement le relais n'est pas encore monté.
J'utilise les possibilités REST présentent sur le web serveur uhttpd du Yun.
Une interface web est placée sur un serveur web distant (Netim mutualisé) afin de commander le thermostat. Les pages web sont protégées par login.
Une autre interface web est placée sur une carte sd présente dans le slot du Yun (en option). Le php a été installé sur le uhttpd (serveur web du Yun). Il reste 52% d'espace libre sur le Yun.
Il y a 3 programmes (jour/nuit paramétrable au niveau des températures demandées et des heures, jour 24h/24 et nuit 24h/24).
Le test des interfaces web est concluant, les temps de réponses sont exploitables.
Dès que le test avec le relais sera concluant et lorsque le système sera effectivement en fonctionnement, je pourrai publier les codes si des personnes sont intéressées.

Bonjour aladec , super projet , je suis preneur , merci de nous donner les info stp .

merci d'avance .

Artnow

Bonjour,

1er test - communications entre les serveurs web (uhttpd sur Yun et WampServer sur un pc)
Pour tester, il suffit d'utiliser un Yun et un pc sur lequel tourne WampServer (php 5.5.12 ou plus)

En pièce jointe, 2 fichiers au format zip.
L'un contient le sketch "terma.ino" et l'autre l'interface web à placer sur le serveur web local (supportant le php).
Ouvrir et décompresser "terma.ino".
Lire les commentaires présents dans le code.
Commenter et décommenter certaines lignes de code pour le test.
On peut utiliser sans la sonde, sans le relais et sans les diodes.
Enregistrer, vérifier/compiler et téléverser.

Le serveur web uhttpd est installé par défaut sur le Yun (écoute sur port 80).
L'architecture REST est protégée par mot de passe (celui du root).
Le Yun doit avoir une adresse IP locale statique (je n'utilise pas le Wifi mais on peut).

Sur le pc, créer un répertoire à la racine du serveur WampServer dans lequel on décompresse les fichiers contenus dans l'archive "thermostat_php.zip".
J'utilise les httprequests pour l'actualisation de la page (voir le fichier javascript).
Ouvrir le fichier "acces.php" et compléter en fonction des adresses IP locales (filtre).
Ouvrir le fichier "index_http.php" et compléter en fonction des adresses IP locales.
Attention dans ce fichier, il faudra introduire l'Authorization Basic dans l'entête de la requête. (voir les explications au niveau de la fonction "rest_get()" présente dans ce fichier).
L'Authorization Basic est codée en Base64 avec "root:mot_de_passe".
En cas de problème, accorder l'autorisation d'accès au REST sans mot de passe afin de tester.

La suite à venir :

  • placer l'interface web sur le serveur d'un hébergeur mutualisé (Netim ou OVH par exemple).
  • dès lors, augmenter le niveau de sécurité
  • translation de ports (sur le routeur local) et gestion de l'adresse ip publique qui peut changer.
  • placer l'interface web sur la carte sd du Yun pour bénéficier des réglages en local
  • installer le php sur le Yun et modifier la configuration du serveur uhttpd
  • monter la sonde, les diodes et le relais sur un support de test.
  • réaliser le montage final et connecter le relais à la commande du chauffage (contact sec permanent).

PS : au cas où, une adresse bien utile :

Attention, cette procédure annule la garantie sur le Yun.
Je l'ai utilisée 2 fois sans problème pour "récupérer" 2 Yun. (il faut être bien concentré ...)

Je suis absent entre le 6/2 et le 19/2.

terma.zip (5.44 KB)

thermostat_php.zip (11.3 KB)

Une photo du montage actuel sans le relais.

20170203_112942[1].jpg

Bonjour,
Placement de l'interface web de commande du thermostat sur le serveur d'un hébergeur (Netim ou OVH par exemple).
On crée un dossier sur le serveur web distant.
Ce dossier sera protégé par un fichier ".htaccess" (serveur Apache).
Voir la méthode sur les sites consacrés à la protection d'un dossier du serveur Apache.
On place dans ce dossier les fichiers contenus dans l'archive "thermostat_php.zip".
Le fichier "acces.php" est à supprimer ainsi que tous les includes incorporant ce fichier dans les autres fichiers php.
On n'utilise ici un autre type de protection qui n'est plus basé sur le filtrage des adresses IP.

En ce qui concerne l'adresse IP du Yun, il s'agit de reprendre l'adresse publique octroyée par votre FAI mais celle-ci peut changer ...

Donc 2 possibilités :

1 - S'inscrire à un service de dyndns afin d'obtenir un pseudo nom de domaine qui pointera vers votre adresse publique et la mettra à jour quand elle changera.

2 - Utiliser un script bash sur le Yun avec une commande curl qui communiquera à un script php situé sur le serveur web distant, l'adresse publique à utiliser. Cette adresse publique sera stockée dans un fichier texte disponible à la lecture. Il faudra ajouter une fonction dans le script "index_http.php" qui récupérera cette donnée.
Ce script bash sera déclenché par une tâche cron (il faudra décider de sa fréquence répétitive)

Il sera également nécessaire au niveau de votre routeur, de réaliser une translation de port afin de pointer sur l'adresse locale du Yun (qui est statique).
Attention, le choix du port externe est important car le pare-feu de l'hébergeur peut bloquer la réception des données sur le site distant (se renseigner chez l'hébergeur).

Si on opte pour la 1ère possibilité, il faudra alors modifier l'adresse du Yun dans le fichier "index_http.php" et ne pas oublier d'ajouter le port externe à cette adresse.
exemple : http://moi.noip.com:6205/data/

Pour la 2ème possibilité (celle que j'utilise) suivant les demandes, je peux fournir plus de détails mais c'est un peu plus compliqué.

A noter que pour l'hébergement distant, j'utilise un Framework avec le moteur de Templates (twig).

Bonjour,
Je viens de recevoir les relais et je les incorpore au montage prototype.
En fait il s'agit d'une plaquette comportant 2 relais que l'on peut trouver chez Double relai pour Arduino
Je n'utilise que le relais n°1. (le n°2 sera utilisé pour une autre fonction)

A respecter les critères suivants :

  • si le Yun n'est pas alimenté, le relais doit être ouvert (chauffage à l'arrêt).
  • au setup, le relais doit être ouvert
  • avant de commander une fermeture ou une ouverture du relais, il faut vérifier son statut (fermé ou ouvert ?)
  • la commande de fermeture ou d'ouverture est exécutée en fonction du statut relevé.

Le code du sketch "terma.ino" est donc modifié et actuellement en test.
Les diodes led rouges du relais et du prototype s'allument en même temps !
Ce code est présent dans l'archive zip (terma.zip) en pièce jointe et remplace le code précédent qui servait à vérifier la communication entre les serveurs web.

En ce qui concerne l'utilisation en local du serveur uhttpd du Yun avec une carte SD, je peux donner plus d'infos en fonction des demandes.

Je compte publier le schéma du montage ainsi que quelques photos.
La réalisation finale sera insérée dans un boîtier de récupération d'un ancien modem/routeur Netgear.

terma.zip (5.49 KB)

Bonjour,
A cette date, le projet est terminé.
Mise en boîtier des composants et rectification de quelques bugs au niveau du sketch.
Voir les photos pour le boîtier et voir le fichier joint pour le nouveau sketch.

Il reste à connecter en // sur le thermostat existant.

terma.ino (20.6 KB)

20170223_091751.jpg

Bonjour,
Les dernières nouvelles sur le projet : le relais est maintenant connecté en // sur le relais du thermostat d'ambiance. Le système fonctionne maintenant depuis 2 semaines et apporte un confort certain. La maison de campagne est maintenant chauffée en attendant notre arrivée (20 degrés).

Bonjour et merci pour le partage de ce super projet, j'ai aussi un projet similaire en utilisant une Funduino Uno r3, écran lcd module à 5 boutons 1602 afin de commandé la température et l'humidité avec possibilité de pouvoir réglé le seuil souhaité

Module Dht22, relais 2 canaux 1 relais pour contrôlé ex. un frigo et 1 relais pour géré l' humidité en contrôlant un humidificateur, module bluetooth "le but était d'avoir les données en temps réel" :slight_smile:

(j'aurais dû prendre un module wifi), un module Eeprom256 pour alléger la mémoire du Uno r3, un module Rtc pour afficher l'heure, un module Ftdi et un module ethernet.

Mon niveau dans la planète Arduino "0", mais grâce à des braves personnes comme vous qui partagent leurs savoir faire, nous inspirent, nous les novices ou amateurs, Grand merci.

Bonjour et merci pour votre commentaire.
Bonne chance pour votre réalisation.
L'Arduino Yun (à part son prix) offre des avantages par rapport au Uno (heureusement vu le prix).
voir https://www.generationrobots.com/fr/401573-carte-arduino-yun.html

L'avantage est de se passer d'écran spécifique et de le remplacer par exemple par une tablette pour accéder au serveur web local sur le Yun. Il suffit alors de réaliser une interface web pour commander les seuils de température et d'humidité. Il est alors possible d'envisager le contrôle via Internet.
Le Yun est doté du wifi et d'un raccordement par câble ethernet (on peut se passer du bluetooth).
Les possibilités de commandes via l'architecture REST sont faciles à mettre en oeuvre.
Je crois que le Yun peut aussi travailler avec le lcd 1602 (à vérifier).
Le réglage de l'heure peut s'obtenir via le système Linux embarqué (pas nécessaire d'avoir un module Rtc)
Le Yun propose un lecteur de carte sd.
A mon avis, la capacité mémoire du Yun est suffisante pour votre projet (pas besoin d'une carte d'extension).

Quelle sera l'utilité du module ftdi dans votre projet ? (usb vers ttl)

Bonjour Aladec désolé pour cette réponse tardive et merci pour vos conseils, en effet je vais voir pour le fonctionnement du Yun que je ne connaissais pas et pour le module ftdi effectivement il ne sera pas utilisé pour ce projet.

L'idéal pour mon projet (en options de luxe) est avoir la possibilité de visionné les résultats de température et d'humidité depuis le smartphone via des applications conçu pour ou même recevoir des mails d'informations du résultat des enregistrements etc...
mais bon il faut déjà que je réussis à régler mes problèmes de dysfonctionnement dû au mauvais Codage. Merci en tout cas pour votre message cordialement.

aladec:
Bonjour et merci pour votre commentaire.
Bonne chance pour votre réalisation.
L'Arduino Yun (à part son prix) offre des avantages par rapport au Uno (heureusement vu le prix).
voir https://www.generationrobots.com/fr/401573-carte-arduino-yun.html

L'avantage est de se passer d'écran spécifique et de le remplacer par exemple par une tablette pour accéder au serveur web local sur le Yun. Il suffit alors de réaliser une interface web pour commander les seuils de température et d'humidité. Il est alors possible d'envisager le contrôle via Internet.
Le Yun est doté du wifi et d'un raccordement par câble ethernet (on peut se passer du bluetooth).
Les possibilités de commandes via l'architecture REST sont faciles à mettre en oeuvre.
Je crois que le Yun peut aussi travailler avec le lcd 1602 (à vérifier).
Le réglage de l'heure peut s'obtenir via le système Linux embarqué (pas nécessaire d'avoir un module Rtc)
Le Yun propose un lecteur de carte sd.
A mon avis, la capacité mémoire du Yun est suffisante pour votre projet (pas besoin d'une carte d'extension).

Quelle sera l'utilité du module ftdi dans votre projet ? (usb vers ttl)

je suis pas tout a fait d'accord...
pour avoir realiser un thermostat connecte avec un un arduino MEGA (pour la memoire et le nombre d'E/S).
il est tout a fait possible de piloter le arduino uno/mega via internet aussi en creant une page WEB.

pour la fonction horaire, si on a une connection internet, on peut tres bien lire l'heure sur internet 1 fois /semaine (sans RTC)

voir thermostat programmable connecte + gestion chauffage central - Réalisations et Projets Finis - Arduino Forum

Bonjour,
Effectivement, il est possible de récupérer l'heure du serveur d'hébergement (on espère qu'il est dans le même fuseau horaire).
Je ne connais pas l'Arduino Mega mais je pense qu'il est nécessaire de lui ajouter un shield Ethernet pour la communication sur le réseau (sans cependant disposer du wifi). Le prix de l'ensemble reste inférieur à celui de l'Arduino Yun.
Est-il possible d'utiliser l'architecture REST sur l'Arduino Mega ?
Le slot pour carte sd, est-il ajouté avec le shield Ethernet ?
La présence du shield Ethernet bloque certaines entrées/sorties pin sur le Mega ?
Merci d'avance pour les précisions.