Bundestagswahl 2025 Wahlergebnisse
(1)
Ich habe mal ein Python Script mithilfe von ChatGPT zum Thema Bundestagswahl 2025 erstellt.
Dieses Script soll die XML Datei herunterladen und auswerten.
Habe die Datei in /config/python_scripts erstellt. Der Datei wurde fetch_latest_results.py.
Des Weiteren habe ich der Configuartion.yaml folgendes ergänzt:
# Python-Skript in Home Assistant
python_script:
(2)
Im 2. Schritt erstellte ich in _packages (habe meine Configuration ausgelagert) eine Yaml Datei namens bundestagswahl.yaml, den den Sensor dazu bereitstellt. Erste Test zeigen, dass es so funktionieren sollte.
Viel Spaß beim Ausprobieren
(1)
import requests
import xml.etree.ElementTree as ET
import json
import re
# Basis-URL des Verzeichnisses mit den XML-Dateien
base_url = "https://www.bundeswahlleiterin.de/bundestagswahlen/2025/ergebnisse/opendata/btw25/daten/"
# Temporäre Datei für die XML-Daten
xml_file_path = "/config/tmp_bundestagswahl.xml"
# 1️⃣ Verzeichnisinhalt abrufen (um neueste Datei zu finden)
try:
response = requests.get(base_url, timeout=10) # Timeout für bessere Fehlerbehandlung
response.raise_for_status() # Falls HTTP-Fehler auftritt, Exception auslösen
except requests.RequestException as e:
print(json.dumps({"Fehler": f"Verzeichnisabruf fehlgeschlagen: {e}"}))
exit(1)
# 2️⃣ Neueste XML-Datei aus der HTML-Seite extrahieren
matches = re.findall(r'href="([^"]+\.xml)"', response.text)
if not matches:
print(json.dumps({"Fehler": "Keine XML-Dateien gefunden"}))
exit(1)
latest_xml_filename = sorted(matches, reverse=True)[0] # Neueste Datei bestimmen
latest_xml_url = base_url + latest_xml_filename
# 3️⃣ XML-Datei herunterladen
try:
response = requests.get(latest_xml_url, timeout=10)
response.raise_for_status()
with open(xml_file_path, "wb") as file:
file.write(response.content)
print(f"XML-Datei erfolgreich heruntergeladen: {latest_xml_filename}")
except requests.RequestException as e:
print(json.dumps({"Fehler": f"Download fehlgeschlagen: {e}"}))
exit(1)
# 4️⃣ XML-Datei parsen und Wahlergebnisse extrahieren
try:
with open(xml_file_path, "r", encoding="utf-8") as file:
xml_data = file.read()
root = ET.fromstring(xml_data)
# Ergebnisse sammeln
results = {}
for party in root.findall("Partei"):
name = party.find("Name").text
votes = party.find("Stimmen").text
percentage = party.find("Prozent").text
results[name] = {
"stimmen": votes,
"prozent": percentage
}
# Falls keine Parteien gefunden wurden, Fehler setzen
if not results:
results = {"Fehler": "Keine Wahlergebnisse verfügbar"}
# 5️⃣ Ergebnisse im JSON-Format für Home Assistant ausgeben
print(json.dumps(results, indent=4, ensure_ascii=False))
except Exception as e:
print(json.dumps({"Fehler": f"Parsing fehlgeschlagen: {e}"}))
(2)
´``yaml
sensor:
command_line:
- sensor:
name: „Aktuelle Bundestagswahlergebnisse“
unique_id: Bundestagswahl
command: „python3 /config/python_scripts/fetch_latest_results.py“
scan_interval: 300 # alle 5 Minuten aktualisieren
json_attributes: