-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEnever_tarieven.py
More file actions
80 lines (61 loc) · 2.19 KB
/
Copy pathEnever_tarieven.py
File metadata and controls
80 lines (61 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/python3.11
import sqlite3
import requests
from logger_setup import get_logger
from config import ENERGY_DB, ENEVER_TOKEN
logger = get_logger("tarieven")
def priceData() -> str | None:
try:
if not ENEVER_TOKEN:
logger.error("Enever_token ontbreekt in omgeving (.env)")
return None
url = f"https://enever.nl/apiv3/stroomprijs_morgen.php?token={ENEVER_TOKEN}"
try:
r = requests.get(url, timeout=10)
r.raise_for_status()
respons = r.json()
except requests.RequestException as e:
logger.error(f"priceData netwerkfout: {e}")
return None
except ValueError as e:
logger.error(f"priceData ongeldige JSON: {e}")
return None
logger.info(f"priceData response ontvangen: {respons}")
if not respons or respons.get("code") == "6":
logger.error(f"Fout in JSON: {respons}")
return None
data = respons.get("data")
if not data:
logger.warning("Enever-stroom-morgen geen data")
return None
datum = data[0]["datum"].split("T")[0]
set_parts = []
kale_prijs = []
for row in data:
try:
uur = row["datum"][11:13]
prijs = row["prijs"]
except (KeyError, IndexError) as e:
logger.error(f"priceData: onvolledig record overgeslagen ({e}): {row}")
continue
if not uur.isdigit() or len(uur) != 2:
logger.error(f"Onverwacht uur-formaat: {uur!r}, sla record over")
continue
set_parts.append(f'"{uur}" = ?')
kale_prijs.append(prijs)
if not set_parts:
logger.error("priceData: geen bruikbare records na validatie")
return None
kale_prijs.append(datum)
with sqlite3.connect(ENERGY_DB) as db:
cur = db.cursor()
cur.execute("INSERT OR IGNORE INTO kaleprijs_1 (datum) VALUES (?)", (datum,))
sql = f'UPDATE kaleprijs_1 SET {", ".join(set_parts)} WHERE datum = ?'
cur.execute(sql, kale_prijs)
db.commit()
return datum
except Exception as e:
logger.error(f"priceData crash: {e}")
return None
if __name__ == "__main__":
priceData()