Nouveau ! S'en suivra avec le temps de nouvelles publications ..
| |
Connexion / inscription Derniers messages
du forum ![]() |
Discussion consultée 1831 fois 13 messages Domos - essais avec gawk via console
Domos+-+essais+avec+gawk+via+console
#1Freudle 05 juillet 2010 à 03h43 Salut,
J'en suis à faire mes premiers essais sous linux. Je communique bien depuis le navigateur avec la carte. J'ai pour mes essais placé la règle tous_eteins.awk à la racine du projet (home/tux/domos/tous_eteins.awk) L'IP de ma carte est 192.168.1.38 J'ai modifié l'ip du fichier en fonction. J'ai commandé des relais manuellement. J'en ai donc en On et d'autres en Off Je lance la commande depuis la console via : gawk -f /home/tux/domos/tous_eteins.awk J'ai les retours sur la console (règle machin truc .. puis ok) Ça me prouve que le fichier est bien parcouru déjà, mais aucune action sur la carte. Pourrais-tu la_Brosse me donner des exemples de règles de base de chez base, sans passer par le planning ? - Simple action sur un relais sans vérif de l'état - Vérif d'un seul relais et action sur ce même relais selon l'état (inverser), avec un print au passage pour indiquer dans la console l'état trouvé des fois que l'action ne marche pas. Je saurais au moins si ça communique. Merci ++ #2Freudle 05 juillet 2010 à 13h53 Salut,
J'ai poursuivi mes investigations, et me voici avec de nouvelles questions ... Ok pour Elinks. Pour lancer une commande via console : /usr/bin/elinks http://192.168.1.38/preset.htm?led0=1 Sauf qu'apparemment il n'est pas possible de cumuler les variables dans l'url avec le caractère &, en tout cas pas en l'état ![]() Je voulais à partir de ta règle tous_eteins exécuter l'action une seule fois avec l'ensemble des variables dans l'url. Voir règle tous_on.txt Autre chose. En faisant un print en sortie de la boucle for on voit que l'action et répétée 2 fois. J'ai pour effectué la capture qui suit enlever la commande navigateur après le print ![]() Qu'est-ce donc que ce HttpService, et pourquoi la boucle for s'exécute 2 fois à la 2 commande (2ème tour de while) ? Je me retrouve avec les variables en double dans l'url ++ [ Message modifié par Freud le 05-07-2010 à 19:49 ]
#3Freudle 05 juillet 2010 à 15h51 Je continu mon monologue
Inutile de vérifier l'état des relais pour ce type de règle, donc autant créer des fichiers htm spécifiques à ces 2 commandes (tous éteins, tous allumés). J'ai créer des fichiers tous_on.htm et tous_off.htm avec une meta redirection comme suggéré par La_Brosse (Archive Domos sous Linux, répertoire "Serveur Relai IP", fichier "A lire pages du serveur"). Je redirige donc vers : /preset.htm?led1=1&led2=1&led3=1&led4=1&led5=1&led6=1&led7=1&led8=1 pour tous_on /preset.htm?led1=0&led2=0&led3=0&led4=0&led5=0&led6=0&led7=0&led8=0 pour tous_off J'ai viré la boucle de contrôle for du fichiers tous_eteins.awk et passé la variable navigateur directement à /usr/bin/elinks http://198.168.1.38/tous_off.htm Fichier dupliqué pour créer le tous_on avec l'url qui va bien. Je joins l'un des fichiers : source tous_off au format txt (convertir en htm) J'aimerais maintenant utiliser un fichier htm commun et lui passer un paramètre par l'url pour choisir l'action à mener, du genre : /tous.htm?action=on
/tous.htm?action=off
/tous.htm?action=inv
La redirection ne pourrait alors plus s'effectuer via la balise META, mais en js L'équivalent tous_on en js nous donnerait : J'ai donc ajouté un petit script js pour lire le paramètre et agir en fonction : source format txt C'est ok pour action=on et action=off. Pour l'inversion il faudra créer une boucle, vérifier l'état des différents relais pour écrire l'url puis rediriger. A suivre .. Edit : Ah, problème. La commande s'exécute parfaitement en insérant directement l'url dans le navigateur : http://192.168.1.38/tous.htm?action=on mais pas en passant par le fichier .awk ![]() La page est bien lu donc url forcément bonne, mais pas d'action Une idée ? Autrement, est-il possible à l'instar des fichiers en html d'envoyer des paramètres dans les fichiers awk, pour n'en n'avoir qu'un là encore ? [ Message modifié par Freud le 05-07-2010 à 16:22 ]
#4La_Brossele 05 juillet 2010 à 19h15 Salut ;
Tu y aura mis le temps, mais ça y est, ça t'as attrapé le bras. Bon voyons les soucis. Pas ? dans une url depuis xterm ? ici pas de soucis, même vers une page php de mon dokuwiki.
Pour les &, il est utilisé par le shell pour appeler un programme en arrière plan. Il faut faire un échappement ou isoler la commande fournie à elinks entre des ' ' ou des " ". Je verrai ça. Pour les exervcices, j'en ai tout un tas à dispo de qui en veux.. Quand je me bricole un truc, je me fait d'abord un fichier super simplifié avec juste la fonction à tester. Comme ça je vois comment ça réagit, ensuite je le place dans le contexte, voir je lui rajoute le httpservice puisqu'il utilise des séparateurs d'enregistrement un peu différent. Je pourrai l'appeler tartempion, le httpservice, c'est juste le nom de la constante qui contiens la concaténation de l'appel à inet plus les constantes de connexion. Inet est un service du système (pas de cailloux, je simplifie) qui peut émettre ou recevoir des requêtes sur le réseau (il ouvre des sockets bidirectionnels). Il est appelé par "/inet/tcp/0/" URLserveur "/" ProxyPort, car je l'utilise là en requérant, sans lui donner de port d'usage (le 0), vers l'url du serveur (pour nous, la carte GCE) vers le port adéquat. Si tu bricoles avec une de mes règles, décommente la ligne du printf (la 21 dans la règle tous éteins). Cela passe en mode affichage le contenu reçu de la carte. Au passage tu utilises une une ancienne version, il n'y a pas la gpl. Pour simplifier l'exercice, tu prend la règle de base. Tu vires tous ce qui est lié à la connexion, tu lui donnera le fichier status en direct sur la ligne de commande, tu vires aussi les constantes associées. Tu remplaces -etat- par une valeur fixe 1 ou 0, tu vire le | navigateur, garde le print seul. Et tu basardes ce qui viens après le test des relais, lignes 30 à 40. Cela devrait être assez léger comme script, non ? Notes bien les balises d'ouverture et fermeture (les accolades). Je n'aime pas la condition inverse. le != marche quand il veux, et c'est pour cette raison que j'emploie à sa place soit l'égalité, soit le caractère vague (le ~). Gorce a modifié la numérotation des relais en passant de 1 à 8 ? si oui il me faudra changer mes limites de test en boucles. J'ai recopié ta règle, j'ai retiré l'appel à la carte, ce qui élimine aussi le while, et pas de répétition de la réponse. Au passage elinks est connu, pas utile de dire qu'il est dans usr/bin. Je vais faire des essai avec une carte qui est à ma disposition. A+ [ Message modifié par La_Brosse le 13-10-2011 à 19:15 ]
#5Freudle 05 juillet 2010 à 20h02 Salut,
Pas ? dans une url depuis xterm ? Si si, le point d'interrogation pas de soucis. Seule le premier paramètre passe justement. Pour les &, il est utilisé par le shell pour appeler un programme en arrière plan. Il faut faire un échappement ou isoler la commande fournie à elinks entre des ' ' ou des " ". Ok, j'essaierai ça. Je ne vais relancer le bousin maintenant. Idem pour le reste. Je vais me tenter les envois d'emails plus tard dans la soirée aussi. Ça coinçait au niveau des essais préliminaires que tu évoques dans l'article. ++ #6La_Brossele 05 juillet 2010 à 21h59 Re...
Bon, j'ai pu essayer deux trois bricoles sur une ipx-800 en attendant la mienne. Hummm, il nous aurait pas modifié la réponse au questionnement le nouveau modèle ? Là avec une bête règle tous éteins, la seule chose que je récupére c'est une erreur 404. Pas moyen d'obtenir un get correct, alors que ça passe sans soucis vers le fichier sur le dépôt... Et que FF peut lire le status sans soucis non plus. Bon, par contre j'ai essayé (à la main) le preset.htm avec elinks. Aucun soucis avec un ou deux params, du moment que l'on place la commande entre apostrophes. Et le résultats est immédiat sur la page d'accueil ouverte en simultané sur FF. Donc, je verrais à corriger les "commande" du navigateur pour ajouter des apostrophes. Pour les échecs des requêtes, je vais voir si ça passe en post, mais je suis pas sûr que inet va aimer ça. #7La_Brossele 07 juillet 2010 à 20h33 Salut ;
Bon, je suis déçu. J'avais bêtement pensé que si un GET marchait vers un hébergeur tout pourris comme le mien (sur debian + apache), pour la récupération du status.xml, cela devait aussi passer vers la carte. Mais j'avais tord. Microchip indique que le GET ne marche qu'avec une taille inférieure à 80 byte. Le status des anciennes fait déjà 238 octets. En refaisant mes essais avec une vieille carte (une microchip demo board), j'obtiens une erreur 501 laconique. Et évidemment j'ai essayé en http 1.0 et 1.1, en plaçant l'adresse résolue, et l'adresse ip...
Dont acte, ça marche pas. Flute ça m'apprendra à faire dans l'abstraction. Suite à cela, j'ai fait une petite procédure d'essai employant wget pour lui tirer les vers du nez. ça fonctionne.
C'est juste un exercice de concept. L'idée, c'est de prendre les mêmes paramêtres que pour inet mais de les concaténer avec un appel à wget, plus les params qui lui sont propres : - le -q pour quiet, discret, par de réponse ; - le -O pifou, écrit le résultat dans un fichier pifou. En écrivant dans un fichier, wget permet de recharger le status.xml encore et encore dans le même fichier. Sinon il dit niet, le fichier existe déjà. Ensuite la procédure se déroule en faisant le wget avec un getline tout crado vers pilou (non déclaré, pas sur la liste des invités). On récupère à la suite le texte dans le pifou, on y lit comme on lisait précédemment la réponse du inet en direct. De là on peux à nouveau tester tout ce que l'on veux. En modifiant les règles déjà crées, je pourrai donc corriger le tir. La règle serveurs_sur_batterie pourra profiter de la présence de pifou pour contabiliser le temps sur batterie... Bon Freud, cela te conviens comme exemple ? [ Message modifié par La_Brosse le 14-10-2011 à 17:01 ]
#8Freudle 17 juillet 2010 à 11h58 Salut,
Je ne comprends à quoi sert le wget. Tu savais déjà lire le fichier statut, et on à toujours une boucle qui envoie autant de requêtes successives (chargements d'url via elinks) qu'il y a de commandes à exécuter. # Boucle de vérification des valeurs des relais, si la cible est trouvée alors action
On ne cherchait pas justement à tout exécuter à partir d'une seule commande ? Autre chose. Quand je dé-commente la commande navigateur elinks se charge bien mais je n'obtiens aucune action. A terme la console reste sur Elinks, autrement-dit je ne reveins pas sur xtrem ou je suis toujours censé voir apparaître le fichier status, lancement de relai0, ... close(navigateur) system ("sleep 2") Ça sert à quoi au juste et comment c'est censé se comporter ? ++ #9La_Brossele 18 juillet 2010 à 20h40 Salut ;
Je sait lire le fichier status "factice" sur le dépôt avec la commande Inet intégrée mais la carte relai ne répond pas à cette demande. Je passe donc par Wget qui est un outil unix qui télécharge un fichier distant. Même fonction, juste un autre outil pour palier à un soucis. Oui la commande se lance autant de fois qu'elle trouve un relai allumé. J'aurai pu employer la concaténation que tu a mis dans ton essai "tous_on". L'adresse de la carte est en adéquation avec ton matériel ? par défaut c'est 1.21 dans le fichier d'exemple. Essaye juste de lancer la commande elinks seule dans une console avec comme cible le preset.htm?led1=0 => mince je vois que dans la précipitation j'ai omis de mettre led dans la commande... J'ai viré des commentaire qui sont présent d'habitude. => Si les options de elinks sont modifiés pour avoir le timer sur 2 ou 3 secondes + action really_quit, alors elinks agit et s'arrête. Et rend la main. => close(navigateur), j'ai fait une ouverture d'un programme, je déclare que je n'en ai plus besoin. C'est inutile mais c'est mieux. => sleep 2 = attente de 2 secondes. #10La_Brossele 19 juillet 2010 à 18h49 Salut ;
Tiens je suis dans PC linux à présent. Bon ,j'ai corrigé la règle tous_éteins, effectivement, le fait de relancer le elinks plusieurs fois posait problème. Le délai autorisé restait inférieur au temps de latence de l'action + le chrono elinks. Le ok s'affiche bien en sur-impression sur elinks... donc j'ai opté pour la concaténation et un délai plus long. Ici avec la carte en statique sur le 1.100, avec 6 secondes je suis large. ![]() Je fais le tour des diverses règles susceptibles d'être avec la même erreur (l'oubli du led machin après "preset?". Les dates des fichiers modifiés seront explicites. Edit : Juste tous_éteins et telerupteur sont révisés. [ Message modifié par La_Brosse le 14-10-2011 à 17:00 ]
Domos - essais avec gawk via console
|