#1 Le 10/10/2019, à 14: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¶m=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, à 21:24)
Hors ligne
#2 Le 10/10/2019, à 14: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, à 16:23)
Hors ligne
#3 Le 10/10/2019, à 15: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, à 16: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"
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#5 Le 10/10/2019, à 16: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, à 20: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... du coup mon script reste bloqué...
une idée ?
merci
Hors ligne
#7 Le 10/10/2019, à 20: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 ».
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#8 Le 10/10/2019, à 21: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
Hors ligne
#9 Le 10/10/2019, à 22: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.
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#10 Le 10/10/2019, à 22: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, à 23: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, à 11:17)
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#12 Le 11/10/2019, à 07: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, à 10: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"
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#14 Le 11/10/2019, à 10: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
Merci encore
Hors ligne
#15 Le 11/10/2019, à 19:59
- higgins91
Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF
Un grand MERCI
J'ai mes 2 couleurs sur mon dashboard Domoticz qui remontent nickel.
voici le script pour ceux qui ont le tempo
#!/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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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¶m=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, à 21:09)
Hors ligne
#16 Le 11/10/2019, à 23:18
- kamaris
Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF
De rien
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, à 23:19)
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#17 Le 12/10/2019, à 12: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"
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#18 Le 12/10/2019, à 18:25
- nany
Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF
Bonjour,
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¶m=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.
Dernière modification par nany (Le 12/10/2019, à 18:39)
Hors ligne
#19 Le 13/10/2019, à 10: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
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#20 Le 13/10/2019, à 11:52
- Postmortem
Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF
Salut,
en particulier dans ces lignes :
adresse="${adresse}${DATEJOUR}${finadresse}"
Non, en particulier là, ca sert à rien
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#21 Le 13/10/2019, à 18:39
- kamaris
Re : [Résolu] Récupérer la couleur Tempo depuis le site d'EDF
C'est vrai !
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.
Mainteneur Xfce : https://gravatar.com/gaelbonithon
Hors ligne
#22 Le 22/11/2019, à 20: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, à 10: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 11/10/2020, à 00: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