ldleman / yana-server

Interface PHP de domotique Y.A.N.A (You Are Not Alone)
http://projet.idleman.fr/yana
107 stars 59 forks source link

Pin des Relais passe en mode IN quand la page est actualisée (plugin WireRelay) #161

Open moebius911 opened 8 years ago

moebius911 commented 8 years ago

Bonjour

Je viens d’installer YANA sur mon raspberry et j’en suis globalement très satisfait. Félicitation !! J’ai par contre un problème avec le plugin WireRelay.

Je travaille actuellement sur le GPIO 0. Apres avoir créé le widjet correspondant, le pin concerné se met en mode IN à chaque actualisation de la page. Ceci est très problématique car à chaque connexion sur la page le Pin perd forcement son état, car on le passe en mode IN. Par contre quand je clic sur sur le widjet la sortie se met bien en mode OUT et change correctement d’état. Le problème arrive seulement quand je rafraichi la page. Voici ce que j’ai dans les logs quand j’actualise la page :

• 23-12-2015 14:09:37 - [notice] :Launch system command : /usr/local/bin/gpio mode 0 in • 23-12-2015 14:09:37 - [notice] :Launch system command (without output): /usr/local/bin/gpio read 0 • 23-12-2015 14:09:39 - [notice] :Launch system command (without output): cat /proc/cpuinfo • 23-12-2015 14:09:39 - [notice] :Launch system command (without output): cat /proc/cpuinfo

Le problème est résolu quand je remplace (Gpio::read($relay->pin,true)?'active':'') dans wireRelay.plugin.php par (exec("/usr/local/bin/gpio read ".$relay->pin, $out)?'active':'')

Ma question est la suivante, comment résoudre ce problème proprement ? J’ai visiblement un mauvais retour d’état dans une variable ce que pourrai expliquer pourquoi j’ai également le mode impulsion qui ne fonctionne pas. Le temps rentré dans les paramètres n’est pas pris en compte.

J’ai essayé sur le raspberry B, B+ et le PI2, avec apache2 et lighttpd. Problème identique. J’ai également essayé la procédure d’installation automatique et manuelle sur les 3 type de raspberry sans effet .

Merci d’avance pour votre aide

Charal commented 8 years ago

Bonjour Moebius911,

J'avais déjà constaté le problème, en fait, lorsque tu rafraîchis le dashboard, tu dois avoir un widget du plugin wireRelay. Celui ci-lors du chargement est lu, mais il y a un second paramètre dans le class GPIO, qui force lors de la lecture, le passage du Pin en mode IN. J'en avais déjà parlé a Idleman, mais pour lui, il fallait d'abord vérifier que cela ne risquait pas d'endommager le RPI de faire des lectures sur des pin en mode OUT (ce que je fais en permanence dans mes plugins pour ma part, sans constaté a ce jour de dysfonctionnement). Donc pour le moment si tu actionnes ton pin seulement par le widget, tu ne peux rien y faire, mais si tu passes par ailleurs, supprimer juste le Widget, plus de lecture = plus de passage en IN.

A ta dipso, bonne journée.

moebius911 commented 8 years ago

Merci pour ces informations. Je fais également des lectures des pins en mode out toute 5 sec pour actualiser ma domotique depuis maintenant 2 ans et aucun problème. Je vais donc corriger le problème avec la méthode expliquée plus haut. Merci encore pour ton retour.

bonne journée

ldleman commented 8 years ago

J'ai fait le correctif, vous me direz si ça passe mieux. :)

moebius911 commented 8 years ago

Merci, le problème est bien corrigé. Quand j’actualise ma page le PIN garde bien son état précédant. Il reste cependant un problème. Peu importe l’état du PIN l’interface web nous le montre toujours à ON quand on affiche l’interface. Est-il possible d’ajouter une lecture de l’état du PIN , pour que son état soit correctement afficher à l’actualisation de la page ?

Merci d’avance

ldleman commented 8 years ago

Etrange c'est pourtant normalement déjà prévu sur wirerelay: https://github.com/ldleman/yana-server/blob/master/plugins/wireRelay/wireRelay.plugin.php#L215

Je regarderais ça

theos10 commented 8 years ago

Bonjour, j'ai remarqué que la class Gpio::read passait en mode in avant de lire l'etat. Sauf erreur de ma part, la lecture d'un gpio peut se faire en mode in et out. c'est d'ailleurs ce qui est fait lors d'un readall. cela peut être gênant si derrière on utilise le gpio en write. par contre passer en mode out lors d'un write, c'est tres judicieux, car au reboot le pi réinitialise le mode des pin. Ghislain.