Aller au contenu


Photo

Résolu => Objective-C - SSH - Raspberry Pi

SSH - Raspberry Pi

  • Please log in to reply
10 réponses à ce sujet

#1 Bobyco

Bobyco

    Planteur de pousses

  • Membre
  • Pip
  • 8 messages

Posté 07 février 2017 - 16:09

Bonjour, j'aurais besoin d'aide pour un petit projet.

 

J'aimerai faire une application iOS en objectif-C simple, avec un "Button" et un "Label". J'aimerait bien que l'application se connecte en SSH au raspberry pi sur le réseau local en lui donnant une instruction pour lancer un fichier bash. Se que je sais faire avec un Terminal. Mais je ne sais pas comment mettre en place dans mon application un connection SSH avec une commande.

 



#2 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 07 février 2017 - 16:22

https://github.com/NMSSH/NMSSH ?


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#3 Bobyco

Bobyco

    Planteur de pousses

  • Membre
  • Pip
  • 8 messages

Posté 08 février 2017 - 12:02

Merci a toi pour se lien c'est exactement se que je chercher d'après la documentation que j'ai pus lire.

Mais je doit avoir un problème quand je réalise le framework.

Je m'explique. J'ai fait comme indiquer dans la documentation, mais quand j'intègre le NMSSH.framework dans mon project et que je lance un build pour tester si sa passe il me ressort une erreur:

 

ld: framework not found NMSSH

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

Après plusieurs teste en recherche je n'arrive pas corriger cela. D'après se que j'ai compris (Je me trompe peut-être) sa serait du a un problème de compatibilité sur les architecture.



#4 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 08 février 2017 - 12:21

Tu l'as installé via Pod/Carthage?

Tu codes en Swift ?
Si c'est via Pods, tu as bien ouvert le .xcworkspace et pas le .xcodeproj? Si tu fais du Swift, tu as bien décommenté dans le PodFile le use_framework?

 

Vu qu'il y a des static libraries (les trucs en .a) d'après ce que j'ai pu voir dans le PodSpec, sur quoi tu essayes de le faire tourner ? Simulateur ? Vrai device?


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#5 Bobyco

Bobyco

    Planteur de pousses

  • Membre
  • Pip
  • 8 messages

Posté 08 février 2017 - 17:53

J'utilise Pod et objectif-C.

Oui j'ai bien lancer avec le .xcworkspace.

J'ai une question, si je suis passer par pod pour l'utiliser, je ne suis pas obliger de générer a partir de la source comme indiquer sur GitHub ?



#6 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 949 messages
  • LocationParis

Posté 08 février 2017 - 18:18

J'ai pas testé, mais tu ne devrais pas avoir à importer le .framework.

 

Il faut juste que tu écrives :
pod 'NMSSH' dans ton PodFile au bon endroit.

Tu dois ensuite fait un pod update.

Une fois terminé, ouvre le .xcworkspace.

Et fais directement un #import <NMSSH/NMSSH.h> là où tu veux l'utiliser.


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#7 Bobyco

Bobyco

    Planteur de pousses

  • Membre
  • Pip
  • 8 messages

Posté 09 février 2017 - 08:52

Je t'en remercie pour t'on aide, tu ma bien aider pour pouvoir me connecter en SSH.

Au niveau du Pod j'avais bien créer le fichier et j'avais bien fait install depuis le terminal.

Par contre je tester plusieurs façon de faire et j'ai générer un framework pour iOS et l'est intégré a mon project et la plus d'erreur donc je sais pas vraiment si les erreur venait de la exactement. 

Quand j'aurais un peut de tant je testerai a nouveau voir si le problème vient de la.

Encore merci  :bravo!:



#8 Bobyco

Bobyco

    Planteur de pousses

  • Membre
  • Pip
  • 8 messages

Posté 09 mars 2017 - 11:35

Re-Bonjour tout le monde. Je revient vous voir car NMSSH me pose un petit problème, Je m'explique.

J'ai le code de basse qui envoie une commande sur mon raspberry

NMSSHSession *session = [NMSSHSession connectToHost:@"192.168.0.15:22"
                                           withUsername:@"pi"];
    
    if (session.isConnected)
        
    {
        self.LabelInfo.text = [NSString stringWithFormat: @"Successfully created a new session"];
        NSLog(@"Successfully created a new session");
        
        [session authenticateByPassword:@"raspberry"];
        
        if (session.isAuthorized)
            
        {
            self.LabelInfo.text = [NSString stringWithFormat: @"Successfully authorized"];
            NSLog(@"Successfully authorized");
            
            
            NSError *error = nil;
            NSString *SwitchGPIO1Reponse = [session.channel execute:@"gpio read 1" error:&error];
            NSLog(@"%@", SwitchGPIO1Reponse);
            
            NSString *Test1 = @"1 ";
            
            if ([SwitchGPIO1Reponse isEqualToString: Test1])
            {
                self.LabelInfo.text = @"Yes";
            }
            else
            {
                self.LabelInfo.text = @"No";
            }

Donc je me connecte et demande l'état du port GPIO 1 qui se trouve sur le raspberry. La réponse ne peut être que 1 ou 0.

Après je veut tester la variable SwitchGPIO1Reponse et selon l'état faire une action. Voila mon problème, après plusieurs essaye avec une autre variable de type NSString ou NSSNumber il me répond toujours No.

Alors j'ai essayer un petit changement dans le code pour vérifier un truc :

NSLog(@"A%@A", SwitchGPIO1Reponse);

Et la je voie que dans la console il m'écrit: 

2017-03-09 11:31:56.908561 test[71995:1341852] NMSSH: Exec command gpio read 1
2017-03-09 11:31:57.024608 test[71995:1341807] A1
A
2017-03-09 11:31:57.025998 test[71995:1341852] NMSSH: Disconnected

Donc voila je pense que le problème c'est que la commande qui me renvoie la réponse mais un Entrer comme dans un terminal après une commande, se qui fait que ma variable n'est jamais bonne et la je sais pas comment je pourrais la tester, vous avez une idée ?



#9 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 206 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 09 mars 2017 - 12:45

NSLog() ajoute un retour à la ligne.

Sinon:

NSString *Test1 = @"1 ";

C'est normal l'espace après le 1?
RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#10 Bobyco

Bobyco

    Planteur de pousses

  • Membre
  • Pip
  • 8 messages

Posté 09 mars 2017 - 21:17

Non l'espace n'est pas la normalement je me suis tromper en copiant. Je pense pas que le NSLog ajoute le retour, je pense que c'est le retour de NMSSH. De mémoire je croie que NSString peut être multi ligne, peut être qu'on peut le formater pour n'avoir que une ligne, non ??



#11 FKDEV

FKDEV

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 660 messages

Posté 10 mars 2017 - 08:36

Je ne comprends pas bien la trace que tu as postée.
Tu devrais faire une trace moins ambigüe pour éviter les erreurs d'interprétation de ce que tu vois dans l'output, par exemple:
NSLog(@"SwitchGPIO1Reponse:'%@'", SwitchGPIO1Reponse);
 
Dans NSString, comme dans tous les langages que je connais, le changement de ligne est matérialisé par des caractères spéciaux "non affichables". Donc oui, NSString est multiligne et si tu veux supprimer les passages à la ligne, il faut supprimer les caractères spéciaux correspondant qui se trouvent dans ta chaîne de caractère.
C'est là que les ennuis commencent quand on fait transiter des chaînes de caractères d'un système d'exploitation à l'autre comme toi :
https://fr.wikipedia...eturn_Line_Feed

Avec ce code tu vas pouvoir supprimer les retours à la ligne
NSString *stringWithoutCR = [myString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSString *stringWithoutCRLF = [stringWithoutCR stringByReplacingOccurrencesOfString:@"\r" withString:@""];
ou plus élégant (si tu es certain d'avoir 0 ou 1 dans ta chaine) :
NSRange range = [myString rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];
if (range.length == 1)
{
    NSInteger returnCode = [[myString substringWithRange:range] intergerValue];
}





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)