Bonjour a tous !
Je suis entrain d’automatiser l’obtention des tarifs EDF Tempo depuis le fichier pdf toujours disponible sur leur page :
https://particulier.edf.fr/content/dam/2-Actifs/Documents/Offres/Grille_prix_Tarif_Bleu.pdf
Ceci me permettra de faire des stats de couts sans avoir a me soucier d’un éventuel changement.
Pour se faire, j’ai utilisé ChatGPT et conçu un script Python qui parse le PDF et m’en extrait un JSON avec tous les tarifs.
L’idée est alors (avec un automatisme ou Node Red) de lire ce JSON et de produire mes statistiques en temps réel.
Ce script fonctionne très bien en l’exécutant depuis un Terminal dans HA OS mais je ne peux l’exécuter depuis un “command_line” … j’aurais besoin d’être conseillé et utiliser la bonne pratique (nouveau je viens de Jeedom)
Le script:
#!/usr/bin/python3
import requests
import pdfplumber
import json
import os
url = "https://particulier.edf.fr/content/dam/2-Actifs/Documents/Offres/Grille_prix_Tarif_Bleu.pdf"
pdf_file = "/config/www/edf_tempo.pdf"
json_file = "/config/www/edf_tempo.json"
# Télécharger le PDF
response = requests.get(url)
with open(pdf_file, "wb") as f:
f.write(response.content)
result = {}
ignored_lines = []
with pdfplumber.open(pdf_file) as pdf:
in_tempo = False
for page in pdf.pages:
text = page.extract_text()
if not text:
continue
lines = text.split("\n")
for line in lines:
line = line.strip()
# Début de la section Tempo
if "Option Tempo" in line:
in_tempo = True
continue
if in_tempo:
# Fin de la section Tempo
if line.startswith("Majoration") or line.startswith("EDF SA"):
in_tempo = False
break
# Ignorer les en-têtes
if any(word in line for word in ["Bleu", "Blanc", "Rouge", "kVA", "Souscrite"]):
continue
# Traiter uniquement les lignes qui commencent par un chiffre
if line and line[0].isdigit():
parts = line.split()
if len(parts) >= 8:
try:
kVA = parts[0]
result[kVA] = {
"abonnement": float(parts[1].replace(",", ".")),
"bleu": {"HC": float(parts[2].replace(",", ".")), "HP": float(parts[3].replace(",", "."))},
"blanc": {"HC": float(parts[4].replace(",", ".")), "HP": float(parts[5].replace(",", "."))},
"rouge": {"HC": float(parts[6].replace(",", ".")), "HP": float(parts[7].replace(",", "."))}
}
except ValueError:
ignored_lines.append(line)
else:
ignored_lines.append(line)
else:
ignored_lines.append(line)
# Sauvegarder le JSON
os.makedirs(os.path.dirname(json_file), exist_ok=True)
with open(json_file, "w") as f:
json.dump(result, f, indent=2)
# Afficher le JSON et les lignes ignorées
print(json.dumps(result, indent=2))
if ignored_lines:
print("\nLignes ignorées (non conformes) :", ignored_lines)
Merci,
Sébastien
