Design général de projet domotique (volets)

Bonjour à tous,

Je cherche à mettre en place un système pour mes volets roulants électriques. Ils sont commandés par des modules yokis et des poussoirs. Le fonctionnement manuel est le suivant : impulsion --> ouverture ou fermeture, impulsion en cours de mouvement --> arrêt.

Ils répondent aussi à diverses commandes "multiimpulsions" : 3 clics --> ouverture complète et rien si déjà ouvert. 4 clics --> fermeture complète et rien si déjà fermé. 2 clics --> position intermédiaire quelle que soit la position initiale. 5 clics --> mémorisation de la position intermédiaire (et d'autres qui m’intéressent moins)

J'ai un module de la même marque qui converti la position ouvert/fermée d'un programmateur en 3 ou 4 impulsions ce qui me permet de fermer et ouvrir tous les volets automatiquement. Sauf que tous les 15j je rerègle l'horloge pour la recaler sur la durée du jour. En été si je part avant l'ordre d'ouverture, les volets sont grands ouverts pendant la canicule... bref pas idéal.

J'aimerai donc rendre les choses plus intelligentes et plus souples et piloter ça par arduiESP et tant qu'à faire y ajouter une interface web.

Les impulsions de commandes peuvent être faites par relais (ou même à tester par optotriac) rien de difficile je pense de ce côté là. J'aimerai faire 4 ou 5 voies différentes pour ne pas tout piloter en même temps (mieux aussi pour le réalisme de la simulation de présence)

Plus compliqué (et objet de ma demande) comment organiser la logique du système : il faut calculer les actions à réaliser et les faire au moment voulu. Comment est-ce que vous verriez le fonctionnement général du code ?

Comment stocker et sous quelle forme les consignes ? Consignes du type

"ouvre les volets de la chambre à 6h30 en semaine, 8h00 le dimanche, ferme partiellement à la tombée de la nuit, ferme complètement à 22h"

Si en plus je pouvais grouper les commandes par « scénarios » (normal, canicule, simulation vacances) etc. ça pourrait être mieux encore.

Connaissez-vous des projets semblables ou avez-vous des idées ou remarques ?
MErci

Bonjour,

Cela revient à définir un langage avec sa propre sémantique qui spécifie d'une manière exhaustive et sans ambiguïté les mots dans une consigne et leur combinaison avec des opérateurs type 'et', 'ou', 'ou-exclusif', etc.

En prenant comme exemple ladite consigne "ouvre les volets de la chambre à 6h30 en semaine, 8h00 le dimanche, ferme partiellement à la tombée de la nuit, ferme complètement à 22h", il vient les termes:

  • ouvre -> Action comme ferme
  • chambre -> Lieu à référencer dans un ensemble (salle de bain, salle à manger, cuisine, etc.)
  • 6h30, 8h00 et 22h -> Heure dans une journée
  • semaine, dimanche -> Jour(s) dans une semaine
  • partiellement -> Qualificatif en % comme complètement (100%), un peu (10%), etc.
  • tombée de la nuit -> Condition extérieure comme "lever du soleil", "zénith", etc. Peut-être une heure mais l'idéal est le résultat d'un capteur de luminosité

Après, un scénario est un ensemble de consigne à satisfaire regroupé derrière un mot comme "canicule", "absence", "présence aléatoire", "orage", etc.

A suivre...

Bonjour,

J'ai réalisé et publié il y a déjà quelques temps qq chose dont vous pourriez vous inspirer
Commande de volets roulants filaires connectés

Le système est en service depuis 2017 sur 10 volets. Il a évolué avec l'ajout des éphémérides (merci Bricoleau) qui automatise les mouvements en fonction des heures de lever/coucher du soleil.

L'ensemble se commande en html avec n'importe quel PC, téléphone ou tablette. Voici quelques copies d'écran:

Ce n'est pas directement utilisable pour votre projet, mais vous pourriez vous en inspirer.
A votre disposition si vous avez des questions,
Bonne bidouille,

MicroQuettas

Merci à tous les deux, ça me donne des pistes...

Reste que, à ce que je comprend de mon propre problème, cela serait plus simple si je pouvais définir des états plutôt que des actions. Je m'explique :

De 22 h à 7 h, tel volet doit être fermé : je défini des états, et c'est finalement ce qui m'importe
Ferme à 22 h, ouvre à 7 h : ce sont des actions. Les modules utilisés attendent des actions.

Deux approches différentes :frowning:

Si je teste l'heure en boucle dans la loop() je dois détecter l'heure de l'action mais aussi enregistrer le fait qu'elle a été lancée et que je ne dois plus la réaliser avant le lendemain.

Je continue à gamberger ... :wink:

je continue de monologuer, si d'aventure quelqu'un voit une erreur ou une solution ou je ne sais quoi, n'hésitez pas à m’interrompre !

En fait si je teste toutes les minutes s'il y a une action à faire dans la minute, ça devrait aller. À la minute suivante l'action n'a plus lieu d'être.

Par contre il faut quand même prévoir le cas d'un redémarrage brutal après coupure de courant et lire la table de toutes les actions prévues et effectuer la dernière en date.
Prévoir aussi que l'heure peut (doit) être modifiée par NTP de temps à autre et que l'on risque de passer la minute d'une des actions à effectuer. Pas super probable mais pas impossible. Pour les changements heure été/hiver je ne manipule pas trop les volets entre 2 et 3 h du matin, ça ne devrait pas poser de problème.