Automatisation de volets roulants

Merci Etienne
Le quartz sur la carte est identifie HDR433M, le quartz tout seul est identifie SFR433A… Je suppose que celui qui est tout seul est le bon quartz et qu’il faut que je remplace celui de la carte. Suppose-je bien?

@etienne

Bonne nouvelle, la solution que tu m’as proposée fonctionne parfaitement au premier coup avec un volet pour le moment. Je vais essayer ton code pour en piloter plusieurs. Histoire de ne pas enregistrer trop de radio dans mes volets:

  • est ce que l’EEPROM s’efface lorsque je televerse un nouveau code sur l’Arduino?
  • Si je change l’arduino, je pense qu’il faut simplement utiliser le meme ID et recharger le dernier rolling code dans l’EEPROM. Me trompe-je?

Pierre

Super!

non

Exactement! tu peux charger un sketch intermédiaire qui ne fait que charger le rolling code en EEPROM.

Normalement, tu peux changer la valeur de newRollingCode dans le sketch et il l’enregistrera dans l’EEPROM au premier lancement

bonjour Etienne

J’ai encore un peu besoin de toi. Avant d’aller plus avant dans le codage de l’Arduino, je voulais voir ce qu on pouvait faire avec le soft dont tu m’avais parlé Domoticz. J’ai mis un raspbian tout neuf sur un PI, puis j’ai installé domoticz. Maintenant je veux juste voir si je suis capable d’ouvrir/fermer les volets soit à heure fixe soit idéalement en fonction de l’heure théorique du lever/coucher du soleil.

Pour le moment il faut simplement envoyer la commande à l’heure dite http://@ip/“syntaxe d’ouverture ou de fermeture”. Si ça marche, j’ajouterai le chiffrement https après puis un username password encore après. Mais pour le moment je suis dans la faisabilité donc la commande est très simple.

J’ai regarde Domoticz mais j’ai pas encore trouvé comment faire simplement l’appel à une URL à une heure donnée Peux tu guider mes pas hésitants?

Vous (terme générique, je te tutoie encore, Maître Pierre :wink:) n’avez pas peur de tous ces sites et adresses diverses auxquelles vous envoyez et enregistrez des mots de passe, adresses IP, codes divers et qui se baladent comme ça dans la nature avec vos coordonnées machines et tutti quanti ?
Perso, je n’ai pas trop confiance dans cette technologie “Réseau ouvert à tous” et surtout dans laquelle on ne maîtrise absolument rien du tout (enfin c’est le cas pour moi !!!) dans la mesure où on gave de Mo de code "“plutôt chiadé”’ une machine (RPI) extrêmement puissante et plutôt “obscure” pour moi mais qui pourrait devenir “extrêmement” transparente pour “certains”…

Tu as tout a fait raison François, c’est la raison pour laquelle pour le moment je ne suis qu’en faisabilité. Pour ne rien te cacher, je n’ai pas voulu donner la sécurité de mes volets a monsieur Google ou a mademoiselle Alaxa. Alors ta question est pleine de sens.

En fait c’est a cela que sert le https. Si le mot de passe est sur ton équipement local de commande (ton PI) et chiffré avec la clef public de l’arduino et est déchiffré sur l’arduino avec la clef privée que seul l’arduino connait, il ne peut y avoir de problème car c’est du chiffrement de bout en bout. Par contre si le mot de passe est dans une base de données de Monsieur Domoticz, chiffré chez eux et déchiffré par l’arduino, là tu es lié a la sécurité de Domoticz.

Un RPi sous raspbian + domoticz c’est certes très complexe mais ce n’est pas obscur car tout est open source!

@pinatl, pour faire ce que tu décris, je pense qu’il faut créer un device virtuel et ensuite créer un script dans le répertoire “script” qui va récupérer l’état et lancer une commande "os.execute(“curl …);”

Pas très simple

C’est bien ce que je dis …
En tous cas, je ne vais pas m’aventurer sur ces applications car ne maîtrisant absolument rien des scripts et de ce qu’ils vont permettre de faire (ou accéder à quoi ! ) bien qu’étant open source (!). Rien ne me garantit que je vais avoir suffisamment de sécurité au niveau des accès soit de cette appli, soit de mon PC par l’intermédiaire de “passerelles” wifi par exemple, puisqu’on inscrit un peu partout nos profils et mots de passe dans le code… :frowning:

pour info

pour ecrire / lire dans l’EEPROM d’un ESP8266, c’est un peu different d’un Arduino uno.

pour ecrire :

EEPROM.begin(size);
EEPROM.put(EEPROM_ADDRESS, newRollingCode);
EEPROM.end();

pour lire

EEPROM.begin(size);
EEPROM.get(EEPROM_ADDRESS, code);
EEPROM.commit();
EEPROM.end();

size being the number of bytes you want to use. Size can be anywhere between 4 and 4096 bytes.`

Avec ca ca marche avec un volet pour le moment.

Je continue.

en fait ca semblait etrange. Apres verification, on doit faire un commit apres un write et non apres un read :slight_smile:
le put n’ecrit que dans un buffer, le commit ecrit les “sizes” bytes en EEPROM.

le EEPROM.end(); semble optionel.

@ Etienne et Nico.

J’ai une question qui pour le moment n’est que philosophique.

Pour que la commande pilote le volet, il faut 2 conditions, le ID soit bon et le rolling code soit bon. Que se passe-t-il si pour une raison ou pour une autre (interférence, disjoncteur 220V du volet off lors de la commande …) le volet ne répond pas à la commande. L’Arduino, ne le sachant pas va incrémenter le rolling code tandis que le volet non, et le rolling code va se désynchroniser. A partir de là ça ne marchera plus, et on ne pourra même plus déprogrammer la commande car il faut pour cela un rolling code valide. Est-ce que cela ne vous est jamais arrivé ?

En tout cas j’imagine que ça n’arrive pas avec les télécommandes Somfy sinon ils n’arrêteraient pas d’être emmerdés au support. Par exemple, le mec met la commande dans sa poche, se met hors de portée du volet et appuie par mégarde sur un bouton. Cela veut-il dire qu’il y a une sorte de protocole d’acquittement du volet vers la commande ?

Y-a-t-il une procédure de resynchronisation autre que réinitialiser complètement le volet et reenregistrer le tout ? Si ma mémoire est bonne, il me semble avoir lu que l’on peut enregistrer 30 ID maxi sur un volet.

Il y a une tolérance dans le rolling code. Il me semble que c’est de l’ordre d’une centaine voire plus.
Le récepteur compare le code reçu à la liste des prochains codes attendus afin d’autoriser une ou plusieurs éventuelles pertes de transmission entre l’émetteur et le récepteur. Quand c’est bon, il y a resynchronisation. Si tu sors de la zone de tolérance, il faut appairer de nouveau. Mais tu ne grilles pas une place dans la liste des 30? si ton ID reste le même.

Bonjour

Une petite question Arduino. Quelqu’un saurait il comment recuperer dans l’arduino quel radio bouton a ete selectionne sur une page Web

Le code html concernant les radio boutons de la page web :
String page_5 = "<input type=radio name=choix_prog value=Automatique checked style=height:200px; width:200px; vertical-align: middle;> Automatique ";
String page_6 = "<input type=radio name=choix_prog value=Manuelle style=height:200px; width:200px; vertical-align: middle;> Manuelle ";

Je suppose qu’en selectionnant un bouton, on doit declencher une procédure (ou une URL) sur l’arduino qui permet de stocker le radio bouton choisi mais je n’ai pas trouvé comment faire.
Je n’ai pas aussi trouvé comment controler la taille des radio boutons dans le code html. (les attributs height et width ne semblent fonctionner que pour height.

Tu doit aver dans ton header une valriable choix_prog qui va de manuel a automatique

jamais fait ça mais il y a un exemple ici avec radio button

Encore une fois Merci Etienne. J’ai exécuté, ça marche, je n’ai plus qu’a regardé le code.

Pierre

Bonjour j’ai encore besoin de vos lumieres. Pour mes volets, j’ai mis une authentification avec cookie. Ca marche bien, mais des que je ferme le browser, le cookie expire et je dois me reauthentifier. Je souhaiterais que ca marche comme l’acolock, c’est à dire qu’on donne le mot de passe la premiere fois et ensuite l’authent se fait automatiquement (eventuellement en expirant le cookie au bout de quelques mois). j’utilise le code joint . Je suppose que c’est un parametre a envoyer lorsque l’on cree le cookie, mais j’ai pas trouve lequel. Quelqu un peut m’aider?

Oui il faut ajouter un Expires ou un Max-Age, comme tu as essayé de le faire, mais il ne faut pas mettre les < et >, et tout mettre dans la même chaîne de caractères. Je pense que comme ça ça devrait marcher :

server.sendHeader("Set-Cookie", "ESPSESSIONID=1; Max-Age=1100000");

T’as des exemples et explications ici : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie, et d’autres infos plus générales ici : https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

Par contre mettre un cookie à 0 ou 1 pour savoir si la personne est connectée n’est pas secure, car le cookie est stocké dans le navigateur et peut donc facilement être passé à 1 par un utilisateur malveillant. Il faudrait plutôt mettre dans le cookie quelque chose qu’une personne qui n’a pas d’identifiants ne puisse pas deviner. Le plus simple si tu n’as qu’un seul identifiant ça serait de remplacer ton 1 par un truc aléatoire (par exemple une chaîne générée avec pwgen -n 20 sous linux, ou n’importe quoi capable de générer un mot de passe, en évitant les caractères trop exotiques car il y a surement des restrictions dans les cookies).

Et je te conseille de mettre ce secret et les autres dans un fichier .h que tu ne partageras pas sur des forums publics :slight_smile: