[Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Vous souhaitez piloter votre framboise à partir d'une page web ? Ou mieux encore à partir d'un smartphone ou d'une tablette Android ? Venez donc visiter cette rubrique...

Modérateur : Francois

zton
Messages : 18
Enregistré le : jeu. 23 oct. 2014 21:46

[Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar zton » lun. 2 mai 2016 01:09

Bonjour,

Dans la continuité d'un post que nous avions développé mon collègue kikonk & moi même (ici : viewtopic.php?f=29&t=213) inhérent à l'ouverture d'un portail/garage depuis une application téléphone/tablette/ordinateur, j'ai pour ma part pas mal travaillé sur une amélioration du projet afin de le rendre le plus générique et malléable possible.
Désormais déjà bien utile pour contrôler certains de mes pi (et autres serveurs) que je gère, je me suis dis qu'il pourrait peut-être en être de même pour vous.
Ce pourquoi ce post et ce partage qui j'espère vous permettra à vous aussi d'avancer dans vos bidouilles et projets en contrôlant votre pi depuis cette application.

En l'état actuel des choses, cette application "Goto314" fonctionne sur de multiples plateformes, à savoir :
Android, Windows et... compile/fonctionne aussi sur MacOSX et iOS.
Je ne pourrais hélas pas fournir tout de suite cette application sur MacOSX et surtout iOS du fait de leurs écosystèmes "très fermés" mais à terme et avec encore un peu de temps, je pense pouvoir rendre la chose possible.
Aucun soucis en revanche pour Android & Windows puisque, comme vous le savez tous, installer un "apk" ou exécuter un "exe" sont choses aisées et courantes sur ces plateformes.
Ceci étant dit, passons aux explications.

Son but principal est d'envoyer des commandes directement à un pi à l'aide de boutons paramétrables et recevoir éventuellement en retour des informations.
L'envoi des commandes est effectué directement en ssh et il n'y a donc pas besoin d'installer un serveur web+php sur le pi. (A noter qu'il serait possible de rajouter une telle fonctionnalité permettant de "taper" vers du web/php, puisque déjà fait lors du projet d'ouverture de portail/garage de kikonk...)
Ces commandes peuvent donc être multiples et variées. Cela peut-être le nom d'un script bash, d'un script python, d'une commande linux classique... Bref, tout est possible puisque nous communiquons comme si nous étions logué sur le Pi en ssh avec un client ssh.
L'application prend également en charge différents profils. Un profil n'étant ni plus ni moins qu'un Pi.
Chaque profils, comporte 3 boutons paramétrables qui enverront ces commandes.
L'application doit donc être paramétrée à l'aide d'un script au format texte (enregistré en utf8 ou ansi selon les plateformes...) dont la structure n'est ni plus ni moins que celle des fichiers ".ini" qui sont très simples à comprendre et à implémenter au sein de l'application.
Un script à "injecter" à l'application peut donc ressembler à ça :

[monpi1]
host=192.168.1.42
port=22
login=pi
password=raspberry
autoconnect=no

button1_visible=yes
button1_name=temperature
button1_type=textreturn
button1_action=/opt/vc/bin/vcgencmd measure_temp

button2_visible=yes
button2_name=camera
button2_type=imagereturn
button2_action=/var/www/image.jpg

button3_visible=yes
button3_name=reboot
button3_type=noreturn
button3_action=sudo reboot

Explications détaillées du script :

[monpi1]
---> nom du profil, impérativement entre crochets. Vous pouvez en mettre autant que vous voulez.
host=192.168.1.42
---> adresse ip (ou nom de domaine) de votre Pi, de ce profil.
port=22
---> Port ssh du pi, de ce profil.
login=pi
---> Votre login/user sur votre pi, de ce profil.
password=raspberry
---> Votre mot de passe du login/user du pi, de ce profil.
autoconnect=no
---> autoconnect permet (yes) ou non (no) de se connecter automatiquement au Pi à la sélection du profil.

button1_visible=yes
---> Le premier bouton (tout à gauche) est visible (yes) ou pas (no, ou vide)
button1_name=temperature
---> Nomme le premier bouton et dans ce cas là, le mot "temperature" sera affiché sur ce bouton.
button1_type=textreturn
---> Ce bouton peut retourner au choix du texte (textreturn), une image (imagereturn), de la voix (voicereturn) ou rien (noreturn).
---> Dans ce cas, textreturn, retournera le texte qu'affiche le pi à l'envoi de la commande.
button1_action=/opt/vc/bin/vcgencmd measure_temp
---> la commande ou l'action à envoyer au Pi.
---> Dans ce cas, nous lui demandons d'afficher la température du cpu du pi.
---> En appuyant donc sur ce bouton, l'application se connectera en ssh sur votre pi, enverra la commande linux, le pi affichera la température qui s'affichera donc dans votre application.

button2_visible=yes
---> Le second bouton (au milieu) est visible (yes) ou pas (no, ou vide)
button2_name=camera
---> Nomme le premier bouton et dans ce cas là, le mot "camera" sera affiché sur ce bouton.
button2_type=imagereturn
---> Ce bouton peut retourner au choix du texte (textreturn), une image (imagereturn), de la voix (voicereturn) ou rien (noreturn).
---> Dans ce cas, imagereturn, retournera une image stockée sur le pi à l'envoi de la commande.
button2_action=/var/www/image.jpg
---> la commande ou l'action à envoyer au Pi.
---> Dans ce cas, nous lui demandons d'aller chercher image.jpg localisée dans /var/www/. L'image peut être au format jpg ou png ou gif.
---> En appuyant donc sur ce bouton, l'application se connectera en ssh sur votre pi, transfèrera en stream sftp l'image du pi dans la fenêtre principale de votre application qui l'affichera. A ce stade, l'image n'est qu'affichée par l'application mais jamais enregistrée dans le stockage de votre application (mais ça pourrait-être une évolution possible...)
---> Si votre pi possède une webcam et que vous la paramétrez pour qu'elle enregistre à intervalles une image au sein de votre pi, l'application pourra donc aller la chercher et l'afficher.

button3_visible=yes
---> Le troisième bouton (tout à droite) est visible (yes) ou pas (no, ou vide)
button3_name=reboot
---> Nomme le premier bouton et dans ce cas là, le mot "reboot" sera affiché sur ce bouton.
button3_type=noreturn
---> Ce bouton peut retourner au choix du texte (textreturn), une image (imagereturn), de la voix (voicereturn) ou rien (noreturn).
---> Dans ce cas, noreturn, ne retournera rien et seule la commande sera envoyée au pi.
button3_action=sudo reboot
---> la commande ou l'action à envoyer au Pi.
---> Dans ce cas, nous lui demandons d'exécuter la commande linux sudo reboot qui reboot le pi...
---> En appuyant donc sur ce bouton, l'application se connectera en ssh sur votre pi, enverra la commande linux et le pi rebootera.
---> Attention, avec sudo, il est généralement demandé le mot de passe root pour pouvoir exécuter la commande. Or, l'application n'enverra pas cette information. Il vous faudra donc simplement attribuer au login/user (pi dans ce cas) les droits adéquats en éditant le fichier /etc/sudoers.

Si vous êtes encore là à me lire, vous aurez constaté que j'ai évoqué la possibilité de retourner de la voix.
C'est effectivement implémenté uniquement avec la version android de l'application et voici comment ça marche.
Reprenons notre exemple du bouton numéro 1 qui affiche la température.
La commande linux utilisée est : /opt/vc/bin/vcgencmd measure_temp
Qui, lorsque tapée sur votre pi (ou envoyée avec le bouton de l'application) vous donne théoriquement le résultat suivant :
temp=42.0'C
Si nous transformons la commande linux afin qu'elle nous retourne un joli texte pouvant être "parlé" par l'application, nous pourrions faire ceci :
/opt/vc/bin/vcgencmd measure_temp | sed -e "s/temp=/le processeur est a /g" | sed -e "s/\./ virgule /g" | sed -e "s/'C/ degres celcius/g"
Et aurions comme résultat :
le processeur est a 42 virgule 0 degres celcius
Donc, la configuration de notre bouton peut s'effectuer de la même manière, à savoir :

button1_visible=yes
---> Le premier bouton (tout à gauche) est visible (yes) ou pas (no, ou vide)
button1_name=temperature
---> Nomme le premier bouton et dans ce cas là, le mot "temperature" sera affiché sur ce bouton.
button1_type=voicereturn
---> Ce bouton peut retourner au choix du texte (textreturn), une image (imagereturn), de la voix (voicereturn) ou rien (noreturn).
---> Dans ce cas, voicereturn, retournera sous forme de voix le texte qu'affiche le pi à l'envoi de la commande.
button1_action=/opt/vc/bin/vcgencmd measure_temp | sed -e "s/temp=/le processeur est a /g" | sed -e "s/\./ virgule /g" | sed -e "s/'C/ degres celcius/g"
---> la commande ou l'action à envoyer au Pi.
---> Dans ce cas, nous lui demandons d'afficher "joliment" la température du cpu.
---> En appuyant donc sur ce bouton, l'application se connectera en ssh sur votre pi, enverra la commande linux, le pi retournera la jolie phrase et l'application la transformera en voix.
---> Vous entrendrez donc dans l'application une voix (féminine ou masculine, selon la configuration vocale de votre smartphone/tablette android) disant : "le processeur est a 42 virgule 0 degres celcius"

Quelques autres alternatives (plus simplistes...) :

button1_visible=yes
button1_name=ditbonjour
button1_type=voicereturn
button1_action=echo bonjour
---> l'application dira "bonjour" (commande linux echo bonjour)

button1_visible=yes
button1_name=directory
button1_type=voicereturn
button1_action=ls
---> l'application vous dictera le retour de la commande linux ls, qui liste votre répertoire courant sur votre pi...

button1_visible=yes
button1_name=update
button1_type=textreturn
button1_action=sudo apt-get update && sudo apt-get upgrade -y
---> l'application effectuera un update+upgrade de votre pi et affichera le résultat... (modifier /etc/sudoers en conséquence...)

button1_visible=yes
button1_name=directory
button1_type=textreturn
button1_action=ls
---> l'application vous affichera le résultat de la commande linux ls, qui liste votre répertoire courant sur votre pi...

button1_visible=yes
button1_name=Portail
button1_type=noreturn
button1_action=./portail.sh
---> l'application executera le script bash "portail.sh" sur votre pi (script bash ou python qui ouvre un portail par exemple) sans aucun retour d'info.

button1_visible=yes
button1_name=Garage
button1_type=voicereturn
button1_action=./garage.sh
---> l'application executera le script bash "garage.sh" sur votre pi (script bash ou python qui ouvre un garage par exemple puis sort un texte "Ouverture du garage" si le résultat est probant) et dictera le retour du texte de ce script bash, "Ouverture du garage" par exemple...

Bref... Les combinaisons possibles étant vastes et variées, l'application est donc malléable et adaptable à plus ou moins n'importe quel projet ;-)

Concernant sa composition "visuelle" :
- Il y a 4 écrans et on y accède par les flèches gauches et droites du bas.
- Sur tous les écrans, il y a, en bas, au milieu, l'accès aux profils.
- Sur le premier écran, en bas, il y a les 3 boutons des actions/commandes envoyées et, dans la partie principale les résultats/retours des commandes envoyées (texte, image...)
- Sur le second écran, on y voit quelques brèves informations sur le profils courant. On peut s'y connecter, se déconnecter. Cet écran n'est pas en soit très utile mais bon...
- Sur le 3ème écran, une fenêtre principale dans laquelle s'affiche le fichier de script ".ini". Le nom du script ".ini" doit d'ailleurs impérativement s'appeler "config.ini". Vous pouvez d'ailleurs modifier ce fichier depuis votre android (pas très pratique avec le petit clavier d'un smartphone et la petitesse de l'écran mais rapide dans le cadre de petites corrections rapides à faire...)
- Toujours sur ce 3ème écran, 3 boutons. Load config, Import config et Save config.
- Load config, charge le "config.ini" perpétuellement stocké avec l'application dans votre android. Si vous lancez l'application pour la toute première fois, j'y ai incorporé un fichier prêt à l'emploi. A vous de le compléter...
- Save config, sauvegarde le fichier "config.ini" actuellement affiché (que vous aurez éventuellement modifié) dans la fenêtre principale au sein de votre application. Le fichier "config.ini" perpétuellement stocké avec l'application dans votre android, n'est théoriquement pas accessible (et "caché") lorsque vous branchez votre smartphone sur votre pc/mac pour y voir son contenu. Si vous êtes root sur votre smartphone/tablette android, oubliez bien évidemment ce que j'ai dit... :)
- Import config, permet là l'import d'un fichier "config.ini" que vous aurez préalablement composé avec votre éditeur préféré depuis votre PC ou Mac et déposé dans votre smartphone/tablette android dans le répertoire RACINE du stockage INTERNE. Une fois importé, il s'affichera dans la fenêtre principale et là, vous pourrez le sauvegarder avec le bouton Save config afin qu'il soit perpétuellement au sein de l'application. Ce mode de fonctionnement est pour le moment la solution la plus "simple" que j'ai trouvé mais je suis ouvert à toute autre propositions car j'ai eu vent de soucis d'imports avec certains android... à tester, à débattre & à suivre donc...
- Concernant ce fichier "config.ini" je vous invite à l'enregistrer en ANSI pour windows et en UTF-8 pour android.
- Le 4ème écran est simplement un "about" écran... il pourrait y inclure une notice (si quelqu'un veut s'y coller...)

Concernant la suite :
Suite à mes récents tests & investigations qui sont plutôt positifs, je compte prochainement implémenter la possibilité, en plus des boutons, de parler à l'application afin qu'elle exécute des commandes (similaires à celles des boutons).
A savoir, vous parlez à l'application et cette dernière envoie les commandes au pi.
exemple :
- L'application se lance, attends une commande vocale ou vous pressez un bouton de type "micro" et vous parlez.
- Là, selon le mot ou la phrase énoncée, une commande se lance.
- Bien sûr, le mot ou la phrase énoncée sera paramétrable au même titre que les boutons paramétrables déjà en place.

Voilà.
Je vous livre ci-après quelques snapshots de l’application et les liens pour télécharger et tester tout ça.
Excusez moi également pour ce long texte et les éventuelles fautes d'orthographes/erreurs qui s'y seraient glissées.
L'application n'en étant à ses tout débuts, il se peut qu'il y ait encore de nombreux bugs et/ou qu'elle plante parfois magistralement :)
N'hésitez pas à me faire du retour et/ou poser vos questions dans ce même thread si possible.
Amicalement, merci de votre attention & bon tests ?

Laurent / zton.

Site (en cours) : http://goto314.com/
zip (tout est dedans) : http://goto314.com/Goto314.zip
apk (seul) : http://goto314.com/Goto314.apk
exe (seul) : http://goto314.com/Goto314.exe
config.ini (seul) : http://goto314.com/config.ini

Snapshots :

Image

Image

Image

Jordandroid
Messages : 2
Enregistré le : sam. 14 janv. 2017 18:06

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar Jordandroid » sam. 14 janv. 2017 18:45

Salut, ton application m'interesse beaucoup car j'ai besoin de créer une application similaire pour un projet (de lycée) , je veux contrôler un raspberry pi à distance en wifi avec un téléphone avec retour vidéo et ce raspberry pi commenderai lui même des arduino, le problème c'est que j'ai besoin de plus de boutons et/où d'intégrela gestion de l'accéléromètre, j'ai tenter de la modifier avec android Studio malheureusement je m'y connais trop peu en java pour corriger les erreurs du au fait que de base tu l'es codé en Delphi et moi la transforme en JAVA ... J'aimerai bien essayer de me débrouiller tout seul, serait il possible d'avoir accès aux sources ou autres me permettant de pouvoir modifier l'application ? (j'essaierai de comprendre comment marche le langage que tu as utilisé et remplacé quelques trucs et doubler les boutons)
Dans tout les cas merci de me répondre

zton
Messages : 18
Enregistré le : jeu. 23 oct. 2014 21:46

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar zton » mer. 18 janv. 2017 16:49

Bonjour,
Je serais bien évidemment très heureux de pouvoir t'aider, mais...
L'application Goto314 est programmée en langage Delphi avec Rad Studio (qui est un IDE payant) et utilise un composant de chez Devart (SecureBridge, qui est payant également) pour le ssh/ssl/sftp. Pour rappel, Goto314 communiquant directement en ssh avec le Raspberry Pi.
Te fournir le source de Goto314 ne me pose en soit aucun problème ( voilà d'ailleurs à quoi ça ressemble : http://goto314.com/source.txt ) mais tu seras confronté à un soucis de taille puisque sans ces deux éléments payants (IDE+Composant) que je ne peux, là par contre, pas te fournir (puisque sinon c'est du piratage...), tu ne pourras absolument rien en faire.
Quant à adapter le code Delphi (sans avoir rad studio) sous un autre langage/IDE (Java/Android Studio par exemple) et sans trop ni rien comprendre tant à l'un qu'à l'autre ne te servira pas à grand chose non plus dans la mesure où ils n'ont absolument rien du tout en commun en terme de structure, librairies, syntaxe et j'en passe...
Enfin, quant à un éventuel reverse engineering ou décompilation de l'apk, dont le rendu sera humainement difficile à lire, à comprendre, à réutiliser, je doute qu'en terme de temps passé ce soit une solution très efficiente.
Tu l'auras compris, tout cela n'est au final pas si simple et nécessitera à ton niveau de déployer d'énormes efforts et ressources pour simplement rajouter quelques boutons à cette actuelle application. Pas sûr que le jeu en vaille la chandelle donc.
Et pour le coup, désolé de refroidir un peu ton ardeur...
Si besoin néanmoins, je suis dans le coin...
A+
Laurent / zton.

Jordandroid
Messages : 2
Enregistré le : sam. 14 janv. 2017 18:06

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar Jordandroid » jeu. 19 janv. 2017 21:56

Salut, merci de ta réponse qui déjà m'aide beacoup à comprendre et pourra m'aider à comprendre les codes faisant comme le tien direct codé avec android studio. Dommage que le système que tu utilise soit payant du coup je vais essayer de passer par ailleurs, dans tout les cas ton code m'aidera à comprendre comment tu as fais toi, car ici c'est compréhensible contrairement a la décompilation de l'apk pour l'ouvrir avec android studio qui crée un code incompréhensible (pour moi.)

Avatar de l’utilisateur
CDBI30
Messages : 17
Enregistré le : dim. 16 nov. 2014 18:43

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar CDBI30 » lun. 3 juil. 2017 13:03

Bonjour,
Fonctionne très bien sous Windows 10 et je lance mes Scripts Python sans problème.
Mais impossible de leur envoyer une commande à distance comme les touches numériques pour des menus
ou même un CTRL+C pour fermer. Obligé d'utiliser le bouton "reboot"
Les menus sont bien affichés, en attente d'une touche----mais rien
c'est pourtant un simple input() dans le script et aucune interface graphique
Une autre petite remarque: pas très lisible avec le fond noir

Cordialement
CDBI

zton
Messages : 18
Enregistré le : jeu. 23 oct. 2014 21:46

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar zton » jeu. 6 juil. 2017 14:01

Salut,
Un peu normal car fonctionnalité non prévue et donc pas implémentée.
Un bouton lance une seule et unique commande, point.
Après ce lancement, il n'y a pas d'interaction supplémentaire de prévue au sein du shell ouvert et notemment au sein de l'éventuel script (processus/programme) lancé.
Donc, si après le lancement de ton script (.sh, .py ... etc) tu dois taper un truc (1,2,3,a,b,c...) dans un "menu" qui attend la frappe d'une touche, effectivement, ça ne marchera pas.
Goto314 est un petit lanceur de simples commandes/scripts, de préférence prémâchés au possible, et non un terminal à part entière et interactif du style "putty" sous windows.
Une solution à ce problème serait d'adapter ton script en y rajoutant la possibilité d'y introduire des arguments en ligne de commande.
Du genre : monmenu.sh 1 (pour l'option 1 dans ton menu), là fonctionnerait.
Ou alors, à mon niveau, de re-penser/re-faire dans sa totalité la structure de l'application... Oublie bien sûr cette solution :)
Amicalement.
Laurent / zton.

Avatar de l’utilisateur
CDBI30
Messages : 17
Enregistré le : dim. 16 nov. 2014 18:43

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar CDBI30 » mar. 11 juil. 2017 11:30

Bonjour Laurent,
Merci pour ta réponse et je m'en doutais un peu.
En effet, cela fonctionne avec un script pour lire des capteurs de température
qui comporte le numéro du port GPIO utilisé en arguments et qui ne fait qu'afficher les mesures.
Goto314 est vraiment pratique, surtout pour faire des tests à distance .

Cordialement,
Christian
CDBI

Avatar de l’utilisateur
CDBI30
Messages : 17
Enregistré le : dim. 16 nov. 2014 18:43

Re: [Projet] Goto314 accédez à votre pi (Android/PC/MacOSX/iOS)

Messagepar CDBI30 » lun. 31 juil. 2017 19:19

Bonjour Laurent,
Modifié mes Scripts pour lire le N° du menu en argument de ligne de commande
Fonctionne super
Mais serait-il possible d'avoir plus que 3 boutons ?
Christian
CDBI


Retourner vers « Des interfaces pour le Raspberry Pi »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité