recuperer info fichier .txt

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
jeromec
Messages : 10
Inscription : 31 mars 2016, 07:29

recuperer info fichier .txt

Message par jeromec »

Bonjour
je suis nouveau sur le forum
je suis possesseur d'un pi depuis pas mal de temps mais tout newbie avec domoticz

c'est mon ère qui m'a lancé dedans, il fait des trucs vraiment pas mal
quant à moi je veux commencer modestement

j'ai un script python qui interrroge des capteurs pour alimenter un site
ce script génère aussi un fichier .txt
j'aimerai récupérer les infos relatives à l'humidité pour les envoyer vers domoticz
le fichier texte ressemble à ça :

Code : Tout sélectionner

heure:2016-03-31 07:30:29.978700
CpuTemp:47.615c
Humidite:36.0%
Temperature:19.5C
Pression:1011hpa
Luminosite:2.0lx
Il ne pleut pas!
je ne voudrai que les % d'hulidité pour l'instant

j'ai essayé de modifier un script domoticz déjà existant mais sans succès
j'ai du mal avec grep et awk

quelqu'un pourrait-il m'aider et m'aiguiller ?

merci d'avance
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: recuperer info fichier .txt

Message par jackslayter »

Code : Tout sélectionner

cat fichier .txt | grep 'Humidite' | sed -e 's/://g' | awk '{print $2}' 
si tu veux supprimer le % ajoute

Code : Tout sélectionner

sed -e 's/%//g'
après le premier sed
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: recuperer info fichier .txt

Message par rimram31 »

awk sert justement a aller chercher des délimiteurs dans un fichier type ligne/colonnes:

Code : Tout sélectionner

grep "Humidite" fichier.txt | awk -F: ' { print $2; }'
awk sait aussi faire des traitements sur des lignes particulières:

Code : Tout sélectionner

awk -F: '/Humidite/ { print $2; }' fichier.txt
Qu'il faut effectivement ensuite retraiter via un sed pour supprimer le % bien que awk sache aussi "tout faire" :mrgreen: :

Code : Tout sélectionner

awk -F: '/Humidite/ { gsub(/%/,"",$2); print $2; }' fichier.txt
même si là, de mon point de vue en tout cas, on perd en clarté.

http://www.gnu.org/software/gawk/manual/gawk.html ;)

Pour être complet, on peut aussi utiliser cut pour découper une ligne avec des séparateurs:

Code : Tout sélectionner

grep "Humidite" fichier.txt | cut -d: -f 2
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
jeromec
Messages : 10
Inscription : 31 mars 2016, 07:29

Re: recuperer info fichier .txt

Message par jeromec »

merci pour les réponses rapides , je m'y penche ce soir et je vous dis quoi
jeromec
Messages : 10
Inscription : 31 mars 2016, 07:29

Re: recuperer info fichier .txt

Message par jeromec »

Merci pour les réponses, cela fonctionne parfaitement pour le pourcentage d'humidité

j'aimerai maintenant creer un sensor texte qui m'affiche la dernière ligne du fichier cité plus haut ("il pleut" ou "il ne pleut pas")
j'ai essayé plusieurs choses mais à chaque fois j'ai un message d'erreur

Code : Tout sélectionner

#!/bin/sh
# Domoticz server
SERVER="192.168.1.39:8080"

PLUIE=$(awk '{ ligne=$0 } END' /var/www/CurrentTemperature.txt)
# Send data
curl -s -i -H  "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=7&nvalue=0&svalue=$PLUIE"
PLUIE=""
et le message d'erreur

Code : Tout sélectionner

awk: line 1: syntax error at or near end of line
HTTP/1.1 200 OK
Content-Length: 53
Content-Type: application/json;charset=UTF-8
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Allow-Origin: *

{
   "status" : "OK",
   "title" : "Update Device"
}
je vais continuer à chercher mais je ne sais pas quel est le probleme.

merci encore
jeromec
Messages : 10
Inscription : 31 mars 2016, 07:29

Re: recuperer info fichier .txt

Message par jeromec »

bon, j'ai partiellement résolu le problème avec ce script

Code : Tout sélectionner

#!/bin/sh
# Domoticz server
SERVER="192.168.1.39:8080"

PLUIE=$(cat "/var/www/CurrentTemperature.txt"| tail -n 1)

# Send data
curl -s -i -H  "Accept: application/json" "http://$SERVER/json.htm?type=command&param=udevice&idx=7&nvalue=0&svalue=$PLUIE"

echo $PLUIE
le problème venait aussi je pense du fait que la ligne que je voulais utiliser contenait des espaces (Il ne pleut pas!) j'ai contourné le problème en ajoutant des tirets dans le script (Il-ne-pleut-pas!)
ce n'est pas très beau mais ça fonctionne.

si quelqu'un a une idée élégante je suis preneur

en tout cas merci pour l'aide pour l'humidité.

jerome
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: recuperer info fichier .txt

Message par jackslayter »

ajoute des %20 au lieu des espaces
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: recuperer info fichier .txt

Message par rimram31 »

Effectivement problème d'encodage d'url (certains caractères doivent être encodés).

Moins compact mais passe partout:

Code : Tout sélectionner

curl -G "http://$SERVER/json.htm" --data type=command --data param=udevice --data idx=7 --data nvalue=0 --data-urlencode svalue="$PLUIE"
on laisse a curl le soin de s'occuper de tout ça ;)
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
jeromec
Messages : 10
Inscription : 31 mars 2016, 07:29

Re: recuperer info fichier .txt

Message par jeromec »

merci ça marche super !

le seul petit souci, c'est pour le script bash qui récupère l'humidité à partit d'un .txt
l'humidité est bien affichée dans le widget mais pas moyen d'avoir un graph

Code : Tout sélectionner

HUM=$(awk -F: '/Humidite/ { gsub(/%/,"",$2); print $2; }' /var/www/CurrentTemperature.txt)

Code : Tout sélectionner

curl -s -i -H "Accept: application/json" "http://$USER:$PWD@$SERVER/json.htm?type=command&param=udevice&idx=5&nvalue=$HUM"
je pense que cela vient du type de données, mais je ne sais pas les manipuler en bash.

merci encore !

jerome
Répondre