Closed KiwiHC16 closed 3 years ago
Comment passe t on les GPIO à docker ? Pour le port serie pas de soucis. Mais comment faire pour les deux PIN IO pour alim et reset ?
Est ce qu'on detecter si le script tourne sur le host ou dans un docker ?
@edgd1er Puis je te laisser investiguer ce sujet ?
@tcharp38 : as tu quelque chose comme ça sur ton orangePi ? ici c'est ce que j'ai sur un raspberry 2
A priori oui.
orangepi@FelicityDBox:~$ ls -R /sys/class/gpio /sys/class/gpio: export gpiochip0 gpiochip352 unexport
Au vu des differents echanges, je vois les choses comme suit
Docker etant une feature "advanced" ca ne semble faire du sens et heureusement on ne joue pas avec les GPIO a beaucoup d endroits et on peut ainsi limiter les exigences au niveau plateforme. Ca fait du sens ?
Je suis ok avec ca. Reste a trouver le moyen de le faire.
Dans le cas "docker" et uniquement dans ce cas, trouver comment controler les GPIO (via /dev/gpiomem ? via /sys/class ?)
Reste qu'a résoudre ce pb. Le reste n'est pas compliqué.
@edgd1er , pour dis tu: "Il y a effectivement une modification sur la présence de gpiomem qui correspond au matériel "officiellement" supporté par le concepteur du pizigate. Cette modification ne marcherait pas sur les rpi like."
C est quoi cette modification ?
PS: Pour moi, si jeedom tourne sur une plateforme, Abeille doit aussi tourner. Il peut être nécessaire de petits ajustements mais on s adapte. Apres si on n'a pas le temps de supporter alors on n'a pas le temps. Et comme tout est ouvert et dispo, chacun peut faire ses adaptations.
La commande ajoutée etait:
[[ ! -e /dev/gpiomem ]] && echo "Erreur,pas de device GPio" && exit
et l'orangePi n'a pas ce /dev/gpiomem d ou la régression pour Tcharp.
Nativement, le raspberry et le orange a priori gere les gpio via le programme gpio. Avoir acces au gpio depuis un conteneur n'est pas natif. il faut ajouter de la configuration au lancement du conteneur. Une fois dans le conteneur, l'utilisation et le parametrage des pin est identique entre le mode natif et le mode conteneur.
Je vais créer un projet pour trouver et valider la configuration nécéssaire pour que le programme gpio marche aussi dans un conteneur.
Bon voila le résultat des courses, j'ai fait un projet pour valider tout cela:
https://github.com/edgd1er/docker-rpi-gpio
un simple git clone https://github.com/edgd1er/docker-rpi-gpio.git && cd docker-rpi-gpio && docker-compose up --build
permet d'avoir l affichage des pin gpio dans le conteneur.
les informations
@tcharp38 , pourrais tu exécuter ce projet sur un orangePi, ce qui permettrait de s'assurer que le moyen de démarrer un conteneur avec accès au gpio sur OrangePi est identique aux raspberry Pi ? il faut installer docker et docker-compose sur un OrangePi,je ne sais pas si cela est possible. je ne connais pas ces bestioles.
Execution du script dans le conteneur:
Recreating gpio_gpio_1 ... done
Attaching to gpio_gpio_1
gpio_1 | uid=0(root) gid=0(root) groups=0(root)
gpio_1 | fd
gpio_1 | full
gpio_1 | mem
gpio_1 | mqueue
gpio_1 | null
gpio_1 | ptmx
gpio_1 | pts
gpio_1 | random
gpio_1 | shm
gpio_1 | stderr
gpio_1 | stdin
gpio_1 | stdout
gpio_1 | tty
gpio_1 | urandom
gpio_1 | zero
gpio_1 | +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
gpio_1 | | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
gpio_1 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
gpio_1 | | | | 3.3v | | | 1 || 2 | | | 5v | | |
gpio_1 | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
gpio_1 | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
gpio_1 | | 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 |
gpio_1 | | | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 |
gpio_1 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
gpio_1 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
gpio_1 | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
gpio_1 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
gpio_1 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
gpio_1 | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
gpio_1 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
gpio_1 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
gpio_1 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
gpio_1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
gpio_1 | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
gpio_1 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
gpio_1 | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
gpio_1 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
gpio_1 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
gpio_1 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
gpio_1 | | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
gpio_1 | +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
Conclusion:
Avec ces résultats voici un proposition pour tester si le gpio fonctionne dans jeedom: (compatible RPI et orangePi) gpio readall 2>&1 >/dev/null [[ $? -gt 0 ]] && echo "Erreur" && exit
Qu'en pensez vous ?
@tcharp,
il semblerait qu'il faille un binaire spécifique OrangePi pour faire fonctionner le gpio. il y a de l'information ici: http://www.orangepi.org/Docs/WiringPi.html
pour entrer dans le conteneur:docker-compose exec gpio bash
Pour l'orangePi, le binaire gpio est il inclus dans la distribution ? comment l'as tu installé ?
cette commande issu de installWiring.sh fonctionne t-elle sur un orangePi ? sudo apt-get -y install wiringpi
J'ai pas installé wiringpi mais WiringOPI. Mais ne te focalise pas sur l'OPI. Il faut choisir la meilleure methode pour un acces "docker" sans tout peter pour la majorité "non docker". Mon installation n'est peut etre pas complete par rapport à un WiringPi par defaut. Par ex, le "/dev/gpiomem" peut etre une option.
Conclusion:
Avec ces résultats voici un proposition pour tester si le gpio fonctionne dans jeedom: (compatible RPI et orangePi) gpio readall 2>&1 >/dev/null [[ $? -gt 0 ]] && echo "Erreur" && exit
Qu'en pensez vous ?
Contrairement à mon test qui ne verifie que si la commande "gpio" est presente, le tient va tester en + qu'il s'execute bien. Donc partant. Mais "echo "error" && "exit" non. Tu vires un message d'erreur explicite et tu ne retournes aucun code d'err (donc ca sera 0=no err).
Je fais donc une contre proposition. On remplace
hash gpio 2>/dev/null if [ $? -ne 0 ]; then echo "= ERREUR: Commande 'gpio' manquante !" echo "= Le package 'WiringPi' est probablement mal installé." exit 4 fi
par
gpio readall 2>&1 >/dev/null if [ $? -ne 0 ]; then echo "= ERREUR: Problème avec la commande 'gpio' !" echo "= Le package 'WiringPi' est probablement mal installé." exit 4 fi
Ca te convient ?
Ceci étant cette modif n'a aucun interet pour docker. Ca change rien. N'est ce pas ?
Il me reste à faire la manip que tu demandes avec "docker-rpi-gpi". Je te tiens au jus
on est d'accord, docker ou pas ça ne change rien . il faut juste pouvoir alerter l'utilisateur que la pizigate ne marchera pas. Si le gpio readall se comporte de manière identique avec un orangePi, alors le test sera efficace.
il faut vérifier via la docker-compose + manip spécifique orangePi que le comportement du binaire est celui attendu.
Salut. Désolé pour le manque de reactivite. J'ai eu qq soucis à installer docker mais la je trouve pas le "docker-compose" dont tu parles. Par contre j'ai pu faire un "docker run hello-world" donc il est la
Hello from Docker! This message shows that your installation appears to be working correctly.
Si ca peut aider: http://kiwihc16.free.fr/Docker.html
Bjr @tcharp38 , pas de soucis. docker-compose est un outil en plus de docker. il faut l'installer. Pour raspberry, j'utilise un projet sur github pour avoir une version a jour. C'etait important quand les version des docker-compose.yaml changeaient rapidement et qu'il fallait une version récente de l'outil pour bénéficier des nouvelles fonctionnalités.
En faisant, une recherche rapide, je n'ai pas trouvé l'équivalent pour orange Pi. peut etre que l'installation
a priori, maintenant, les packages python fonctionnent pour avoir docker-compose: sudo apt-get install -y python python-pip libffi-dev sudo apt-get install python-backports.ssl-match-hostname sudo pip install docker-compose
Salut @edgd1er Je vais tacher de trouver du temps pour essayer ca mais j'avoue ne pas savoir ou on va avec cette manip. A terme tu envisages de remplacer les appel "gpio mode X out" ou "gpio write x y" par quoi ?
l'action est de remplacer le test hash gpio 2>/dev/null
par command - v gpio && gpio readall 2>&1 >/dev/null
.
le premier produit un hash d'un fichier et donc ne test rien hormis la présence du fichier. le second valide que la commande existe, soit executable et lit les ports gpio. Le code retour donne l'état.
le fait que tu l’exécutes sur un orangePi est pour vérifier que le résultat est le même, puisque ce matériel n'est pas identique aux raspberry. et aussi de valider le comentaire sur comment rendre accessible le gpio dans un conteneur.
le principal etant la validation des commandes. le faire dans un conteneur est un bonus pour valider le commentaire, donc pas primordial.
Ok donc on change rien à l execution. C etait gpio avant ca reste gpio puisque la tu n'as changé que des "tests de presence d'une commande".
Je veux bien croire que "command
Ok je complete et je resume
Correct ?
oui
gpio, docker ou pas, reste la commande pour piloter les pins.
pour docker, il faut "amener" le device gpio dans le conteneur, comme tu "amenes" le port usb pour la zigate, ou le port AMA pour le zwave, d'ou le commentaire pour préciser ce point. Auparavant, la question "comment faire" etait posée.
ok parfait alors. Ca reste bien compatible aux non docker par defaut. Nickel
@edgd1er Abeille fonctionne sous docker avec tes modifs ?
@tcharp38 ,
oui, Abeille fonctionne avant et après mes modifs. pas de soucis. avec deux bémols, je n'ai qu'une zigate usb en production et une pour le dev.
@edgd1er C'était pas ma question. Est ce que ca marche sous docker ? Si oui on n'a rien changé pour ca et tout etait dans la config docker. On est bien d'accord ?
Cote USB ou PI ca semble ok chez moi.
@tcharp38 , Tu poses une question, je te répond oui et tu me dis ce n’était pas ta question. je ne suis pas sur de comprendre. j'aurais du peut etre repréciser que pour mes dev et ma prod, je fais tout avec docker.
pour tout les utilisateurs (docker, non docker, rpi, non rpi ) les tests ont été changés et cela valide mieux les conditions. (hash remplacé par command -v). A partir de la, on ne peut pas dire que rien n'a changé. le résultat est plus fiable et si cela marchait pour toi, cela marche encore, et donc cela n'a rien changé dans ce cas la.
la config /dev/mem et cap_app rawsysio est spécifique pour docker et doit être intégré à la séquence de lancement du conteneur avant même que jeedom n'apparaisse.
Ha ok tu bosses tout sous docker donc je comprends mieux ta reponse. Merci. Donc docker ca fonctionne, ce qui reponds à vos besoins. Et les GPIO sont ok Je clos
Clarifier comment on gere la PiZigate dans Docker GPIO Docker + simplification du test #1391