Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/10/2019, à 13:22

higgins91

[Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Bonjour,

J'ai un contrat EDF Tempo, il y a 3 couleurs de tarification (BLEU, BLANC et ROUGE) la couleur du lendemain est annoncée dans la journée et la couleur du jour est rappelée également.
Jusqu'a présent j'avais un script qui allait chercher la couleur sur un site qui reprenait la couleur donnée par EDF. Malheureusement, le site en question ne donne plus l'info et je voudrai donc aller chercher l'info à la source. Cette source étant:
view-source:https://particulier.edf.fr/ … erte=TEMPO
ou DATE est du format 2019-09-22
cela donne en JSON:

JourJ1   
Tempo    "BLEU"
JourJ   
Tempo    "BLEU"

ou en format brut:

{"JourJ1":{"Tempo":"BLEU"},"JourJ":{"Tempo":"BLEU"}}

Mon problème est donc de trouver les 2 couleurs JourJ1 et JourJ

J'ai cherché sur google et trouvé que la commande GREP pourrais bien m'être utile.
Je pensais faire cela pour le lendemain:

je cherche JourJ1":{"Tempo":"BLEU si je trouve demain est bleu
je cherche JourJ1":{"Tempo":"BLANC si je trouve demain est blanc
je cherche JourJ1":{"Tempo":"ROUGE si je trouve demain est rouge

et pareil pour aujourd'hui
je cherche JourJ1":{"Tempo":"BLEU si je trouve aujourd'hui est bleu
je cherche JourJ1":{"Tempo":"BLANC si je trouve aujourd'hui est blanc
je cherche JourJ1":{"Tempo":"ROUGE si je trouve aujourd'hui est rouge

cela donne par exemple:

site=$(curl -s "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO")
if grep -q "JourJ1":{"Tempo":"BLEU" "site" ; then
    #Envoi l'info à Domoticz
    curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=35&nvalue=0&svalue=Bleu"
fi

Mais comment faire avec les " dans la chaine de recherche ?

je vous remercie par avance.

Dernière modification par higgins91 (Le 11/10/2019, à 20:24)

Hors ligne

#2 Le 10/10/2019, à 13:55

pingouinux

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Bonjour,

grep -q "JourJ1\":{\"Tempo\":\"BLEU" <<<"$site" ...

ou

grep -q 'JourJ1":{"Tempo":"BLEU' <<<"$site"...

On doit pouvoir faire plus simple, si tu précises ta demande.

Ajouté :
Tu peux récupérer directement la couleur dans une variable :

coul_J=$(grep -Po '(?<="JourJ":{"Tempo":")[^"]+(?=")' <<<"$site")
coul_J1=$(grep -Po '(?<="JourJ1":{"Tempo":")[^"]+(?=")' <<<"$site")

Édité :
"$site" remplacé par <<<"$site" suite à la remarque de kamaris en #4

Dernière modification par pingouinux (Le 10/10/2019, à 15:23)

Hors ligne

#3 Le 10/10/2019, à 14:57

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

merci pour ta réponse.
Mon but est de mettre à jour un dispositif dans Domoticz (solution pour domotique).
Je dois, via un script, envoyer par une commande JSON, la couleur du jour et du lendemain suivant la couleur récupérée sur le site d'EDF (pour l'exploiter dans des scénarios)

je vais essayer tes propositions dès ce soir en rentrant du travail.
Merci encore

Hors ligne

#4 Le 10/10/2019, à 15:06

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Attention : dans les expressions de pingouinux, "$site" est à remplacer par <<< "$site"

Hors ligne

#5 Le 10/10/2019, à 15:21

pingouinux

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

@kamaris #4 : Exact, je corrige.

Hors ligne

#6 Le 10/10/2019, à 19:49

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

bonsoir,
j'ai un problème de curl sur la page d'EDFdonc je ne peux même pas tester votre proposition (à tous les 2)...

si je fais un

curl -o texte.txt www.google.fr

j'obtiens un fichier texte contenant la page d’accueil de google
mais si je fais un

curl -o site.txt "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO"

ça mouline sans fin... sad du coup mon script reste bloqué...

une idée ?

merci

Hors ligne

#7 Le 10/10/2019, à 19:56

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Si ça marchait plus haut avec le curl -s, c'est peut-être un problème temporaire d'accès au serveur, puisque l'url est la même.
Personnellement, comme je n'ai pas les droits pour accéder à cette page, ça ne mouline pas, mais ça me renvoie un « Access Denied ».

Hors ligne

#8 Le 10/10/2019, à 20:10

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

je n'ai jamais essayé cette adresse, la commande "curl -s" pointait sur le site qui est maintenant hors service... mon but est de remplacer le site (mais c'est pas du plug & play)

ce que je ne comprend pas c'est que cette adresse copiée dans firefox affiche bien la page ! (j'ai testé sous windows et sous debian sur raspberry Pi)
j'ai essayé avec wget et j'obtiens le code source de la page...
c'est quand même frustrant sad

Hors ligne

#9 Le 10/10/2019, à 21:02

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Je ne comprends pas trop ce que tu dis. Si je compare ton post en #1 :

site=$(curl -s "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO")

et ton post en #6 :

curl -o site.txt "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO"

c'est bien la même url.

Hors ligne

#10 Le 10/10/2019, à 21:23

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

alors en post #1 c'est déjà la nouvelle adresse que je n'avais pas encore testé. L'ancienne est http://domogeek.entropialux.com/tempoedf/now
désolé pour le malentendu!

je viens de regarder le code erreur, c'est semble t-il en rapport avec SSL:

je n'ai pas encore trouvé la solution...

Hors ligne

#11 Le 10/10/2019, à 22:50

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Ah ok, je comprends mieux.
Par ailleurs, j'arrive à reproduire ton problème en entrant l'url dans firefox, et en utilisant dans le terminal wget ou curl : firefox et wget me donnent bien le contenu recherché, tandis que curl non.
Il semble que ce soit un problème avec http2, mais je ne vois pas comment aboutir.
Mais pourquoi as-tu spécialement besoin de passer par curl pour obtenir ces données ?

Dernière modification par kamaris (Le 11/10/2019, à 10:17)

Hors ligne

#12 Le 11/10/2019, à 06:03

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

pour curl c'est ce qui était utilisé avec l'ancien site donc j'ai repris (peut-être bêtement) la même chose !
La seule chose dont j'ai besoin est de récupérer les 2 mots indiquant les 2 couleurs, peu importe la commande utilisée...
merci en tout cas d'essayer aussi de ton coté.

Hors ligne

#13 Le 11/10/2019, à 09:27

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Eh bien à ce moment là tu remplaces

curl -o site.txt "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO"

par

wget -O site.txt 'https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO'

et c'est bon pour ton script, non ?

Par contre, si tu utilises cette formulation, il faudra remplacer, dans les grep donnés par pingouinux en #2, le <<<"$site" par site.txt.
Sachant que tu peux aussi tout faire en une ligne, en raccordant le wget et le grep par un pipe :

wget -O - 'https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO' | grep -q "JourJ1\":{\"Tempo\":\"BLEU"

Hors ligne

#14 Le 11/10/2019, à 09:30

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

je vais essayé ce midi du boulot (mais pas sur d'avoir accès à distance avec les firewall) sinon ce soir en rentrant. Par contre hier j'ai essayé avec wget mais j'obtenais le code source de la page et pas le résultat affiché...
Je te tiens au courant wink
Merci encore

Hors ligne

#15 Le 11/10/2019, à 18:59

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Un grand MERCI big_smile
J'ai mes 2 couleurs sur mon dashboard Domoticz qui remontent nickel.

voici le script pour ceux qui ont le tempo smile

#!/bin/bash
DATEJOUR=$(date +%Y-%m-%d)

adresse="https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter="
finadresse="&TypeAlerte=TEMPO"
adresse=${adresse}${DATEJOUR}${finadresse}

#echo $adresse
wget -O site.txt $adresse

#echo RechercheJour
coul_J=$(grep -Po '(?<="JourJ":{"Tempo":")[^"]+(?=")' site.txt)
coul_J1=$(grep -Po '(?<="JourJ1":{"Tempo":")[^"]+(?=")' site.txt)
#echo $coul_J
#echo $coul_J1

#echo EnvoiDomoticz
#envoi gris
if [ $coul_J1 = "ND" ]; then
#echo "demain non determine"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=135&nvalue=3&svalue=ND"
fi

if [ $coul_J1 = "BLEU" ]; then
#echo "demain jour bleu"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=135&nvalue=0&svalue=Bleu"
fi

if [ $coul_J1 = "BLANC" ]; then
#echo "demain jour blanc"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=135&nvalue=1&svalue=Blanc"
fi

if [ $coul_J1 = "ROUGE" ]; then
#echo "demain jour rouge"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=135&nvalue=2&svalue=Rouge"
fi

#aujourd'hui
if [ $coul_J = "BLEU" ]; then
#echo "aujourd'hui jour bleu"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=35&nvalue=0&svalue=Bleu"
fi

if [ $coul_J = "BLANC" ]; then
#echo "aujourd'hui jour blanc"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=35&nvalue=1&svalue=Blanc"
fi

if [ $coul_J = "ROUGE" ]; then
#echo "aujourd'hui jour rouge"
curl "http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=35&nvalue=2&svalue=Rouge"
fi

il y a des optimisations possible mais ce script étant lancé 3 fois par jour, qu'il prenne 1 seconde ou 10 c'est pas critique.

merci encore

Dernière modification par higgins91 (Le 11/10/2019, à 20:09)

Hors ligne

#16 Le 11/10/2019, à 22:18

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

De rien smile
Pense juste à mettre tes variables entre guillemets doubles en général, pour éviter toute interprétation de leur contenu par le shell, en particulier dans ces lignes :

adresse="${adresse}${DATEJOUR}${finadresse}"
wget -O site.txt "$adresse"
if [ "$coul_J1" = "ND" ]; then

et de même pour tous les autres if en dessous.

Dernière modification par kamaris (Le 11/10/2019, à 22:19)

Hors ligne

#17 Le 12/10/2019, à 11:27

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Pour info, il est aussi possible d'utiliser curl pour récupérer les données, en le faisant passer pour wget au niveau du user-agent (apparemment, le serveur en question n'aime pas curl…) :

curl -A 'Wget/1.20.3 (linux-gnu)' -o site.txt "https://particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter=2019-10-10&TypeAlerte=TEMPO"

Hors ligne

#18 Le 12/10/2019, à 17:25

nany

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Bonjour,



higgins91 a écrit :

il y a des optimisations possible mais ce script étant lancé 3 fois par jour, qu'il prenne 1 seconde ou 10 c'est pas critique.

Je ne sais pas si ça optimise mais je trouve plus élégant de mettre des case à la place des if successifs :

#!/bin/bash
DATEJOUR=$(date +%Y-%m-%d)

adresse="particulier.edf.fr/bin/edf_rc/servlets/ejptemponew?Date_a_remonter="
finadresse="&TypeAlerte=TEMPO"
adresse="https://${adresse}${DATEJOUR}${finadresse}"

locadr="http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx="

# echo "$adresse"
wget -nv -O site.txt "$adresse"

# echo "RechercheJour"
coul_J=$(grep -Po '(?<="JourJ":{"Tempo":")[^"]+(?=")' site.txt)
coul_J1=$(grep -Po '(?<="JourJ1":{"Tempo":")[^"]+(?=")' site.txt)
# echo "$coul_J"
# echo "$coul_J1"

# echo "EnvoiDomoticz"
# envoi gris
case "$coul_J1" in
  ND)
    # echo "demain non determine"
    curl "${locadr}135&nvalue=3&svalue=$coul_J1";;
  BLEU|BLANC|ROUGE)
    coul_J1="${coul_J1,,}"
    coul_J1="${coul_J1^}"
    # echo "demain jour $coul_J1"
    curl "${locadr}135&nvalue=0&svalue=$coul_J1";;
  *)
    # echo "$coul_J1 n’est pas une valeur attendue."
    ;;
esac

# aujourd'hui
case "$coul_J" in
  BLEU|BLANC|ROUGE)
    coul_J="${coul_J,,}"
    coul_J="${coul_J^}"
    # echo "aujourd'hui jour $coul_J"
    curl "${locadr}35&nvalue=0&svalue=$coul_J";;
  *)
    # echo "$coul_J n’est pas une valeur attendue."
    ;;
esac

Code passé dans ShellCheck. wink

Dernière modification par nany (Le 12/10/2019, à 17:39)

Hors ligne

#19 Le 13/10/2019, à 09:21

ar barzh paour

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

@nany
merci pour le lien de ShellCheck qui permet de tester les scripts sh/bash/dash/ksh


Ubuntu 20.04  ( avril 2020)        21.04 en test
diverses versions 18.04 (uefi et non uefi) ,  16.04 , 14.04 (inutilisée sauf un logiciel)
PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz Ubuntu 20.04

Hors ligne

#20 Le 13/10/2019, à 10:52

Postmortem

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Salut,

kamaris a écrit :

en particulier dans ces lignes :

adresse="${adresse}${DATEJOUR}${finadresse}"

Non, en particulier là, ca sert à rien tongue


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#21 Le 13/10/2019, à 17:39

kamaris

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

C'est vrai ! big_smile
Confusion à cause de la concaténation : il n'y a pas que dans les cas var1=$var2 ou var=$(cmd) que ça ne sert à rien.

Hors ligne

#22 Le 22/11/2019, à 19:26

Imagine

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

Bonjour
Attention, le retour à un peu changé, TEMPO_est ajouté devant la couleur

coul_J=$(grep -Po '(?<="JourJ":{"Tempo":")[^"]+(?=")' site.txt)

n'extrait plus la couleur du jour mais TEMPO_laCouleurDuJour

coul_J=$(grep -Po '(?<="JourJ":{"Tempo":"TEMPO_)[^"]+(?=")' site.txt)

permet de n'extraire que la couleur, idem pour J1

Merci pour le code

Hors ligne

#23 Le 24/11/2019, à 09:16

higgins91

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

merci d'avoir mis à jour le texte à rechercher. Le site à en effet changé de format début novembre.

Hors ligne

#24 Le 10/10/2020, à 23:25

Imagine

Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF

En fait ça ne fonctionne pas pour J1 quand la couleur n'est pas renvoyée (ND)

  TEMPO_BLEU|TEMPO_BLANC|TEMPO_ROUGE)
    coul_J1="${coul_J1,,}"
    coul_J1="${coul_J1^}"
    coul_J1="${coul_J1:6}"

permet de ne récupérer que la couleur

Hors ligne