Initial commit: Eurojackpot analysis and prediction system
This repository contains a comprehensive Eurojackpot lottery analysis and prediction system including: - Historical data analysis and processing - ML-based prediction models - Automated weekly tip generation - Position and range analysis tools - Notification system for results 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,484 @@
|
||||
# 📱 Benachrichtigungen Setup-Guide
|
||||
|
||||
Erhalte automatische Benachrichtigungen über:
|
||||
- 🎲 Neu generierte Tipps (mit bestem Tipp)
|
||||
- 🎯 Ziehungsergebnisse (deine Treffer)
|
||||
- ❌ System-Fehler
|
||||
|
||||
## 📋 Übersicht
|
||||
|
||||
Das System unterstützt **zwei Benachrichtigungskanäle**:
|
||||
|
||||
1. **Telegram Bot** (empfohlen) - Push-Benachrichtigungen auf dein Handy
|
||||
2. **E-Mail (SMTP)** - Klassische E-Mail-Benachrichtigungen
|
||||
|
||||
Du kannst beide aktivieren oder nur einen davon nutzen.
|
||||
|
||||
---
|
||||
|
||||
## 🤖 Telegram Bot Setup (Empfohlen)
|
||||
|
||||
### Schritt 1: Bot erstellen
|
||||
|
||||
1. Öffne Telegram und suche nach `@BotFather`
|
||||
2. Sende `/newbot`
|
||||
3. Gib einen Namen ein (z.B. "Eurojackpot Notifier")
|
||||
4. Gib einen Username ein (muss auf `bot` enden, z.B. `eurojackpot_tips_bot`)
|
||||
5. **Kopiere den Bot Token** (Format: `123456789:ABCdefGHIjklMNOpqrsTUVwxyz`)
|
||||
|
||||
### Schritt 2: Chat ID ermitteln
|
||||
|
||||
#### Option A: Via GetUpdates API (einfach)
|
||||
|
||||
1. Sende eine Nachricht an deinen Bot (z.B. "/start")
|
||||
2. Öffne im Browser:
|
||||
```
|
||||
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
|
||||
```
|
||||
(Ersetze `<YOUR_BOT_TOKEN>` mit deinem Token)
|
||||
|
||||
3. Suche nach `"chat":{"id":` - die Zahl danach ist deine Chat ID (z.B. `123456789`)
|
||||
|
||||
#### Option B: Via @userinfobot (noch einfacher)
|
||||
|
||||
1. Suche in Telegram nach `@userinfobot`
|
||||
2. Sende `/start`
|
||||
3. Der Bot antwortet mit deiner Chat ID
|
||||
|
||||
### Schritt 3: Konfiguration
|
||||
|
||||
Bearbeite die Datei `config/notifications.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"bot_token": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz",
|
||||
"chat_id": "123456789"
|
||||
},
|
||||
"email": {
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Schritt 4: Test
|
||||
|
||||
```bash
|
||||
cd "/Users/sebastianfrohlich/Library/Mobile Documents/com~apple~CloudDocs/Jupyter Notebooks/Eurojackpot"
|
||||
source venv/bin/activate
|
||||
python scripts/utils/notifier.py --test
|
||||
```
|
||||
|
||||
Du solltest jetzt eine Test-Nachricht auf Telegram erhalten! ✅
|
||||
|
||||
---
|
||||
|
||||
## 📧 E-Mail Setup
|
||||
|
||||
### Gmail verwenden
|
||||
|
||||
#### Schritt 1: App-Passwort erstellen
|
||||
|
||||
Gmail erfordert ein **App-Passwort** (nicht dein normales Passwort):
|
||||
|
||||
1. Gehe zu https://myaccount.google.com/security
|
||||
2. Aktiviere **2-Faktor-Authentifizierung** (falls noch nicht aktiv)
|
||||
3. Suche nach "App-Passwörter"
|
||||
4. Wähle "Mail" und "Sonstiges Gerät"
|
||||
5. Gib einen Namen ein (z.B. "Eurojackpot Bot")
|
||||
6. **Kopiere das 16-stellige Passwort** (Format: `xxxx xxxx xxxx xxxx`)
|
||||
|
||||
#### Schritt 2: Konfiguration
|
||||
|
||||
Bearbeite `config/notifications.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"telegram": {
|
||||
"enabled": false
|
||||
},
|
||||
"email": {
|
||||
"enabled": true,
|
||||
"smtp_server": "smtp.gmail.com",
|
||||
"smtp_port": 587,
|
||||
"smtp_user": "deine.email@gmail.com",
|
||||
"smtp_password": "xxxx xxxx xxxx xxxx",
|
||||
"from_email": "deine.email@gmail.com",
|
||||
"to_email": "deine.email@gmail.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Andere E-Mail-Provider
|
||||
|
||||
#### iCloud Mail
|
||||
|
||||
```json
|
||||
{
|
||||
"email": {
|
||||
"enabled": true,
|
||||
"smtp_server": "smtp.mail.me.com",
|
||||
"smtp_port": 587,
|
||||
"smtp_user": "deine.email@icloud.com",
|
||||
"smtp_password": "app-spezifisches-passwort",
|
||||
"from_email": "deine.email@icloud.com",
|
||||
"to_email": "deine.email@icloud.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Outlook/Hotmail
|
||||
|
||||
```json
|
||||
{
|
||||
"email": {
|
||||
"enabled": true,
|
||||
"smtp_server": "smtp-mail.outlook.com",
|
||||
"smtp_port": 587,
|
||||
"smtp_user": "deine.email@outlook.com",
|
||||
"smtp_password": "dein-passwort",
|
||||
"from_email": "deine.email@outlook.com",
|
||||
"to_email": "deine.email@outlook.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Web.de / GMX
|
||||
|
||||
```json
|
||||
{
|
||||
"email": {
|
||||
"enabled": true,
|
||||
"smtp_server": "smtp.web.de", // oder smtp.gmx.net
|
||||
"smtp_port": 587,
|
||||
"smtp_user": "deine.email@web.de",
|
||||
"smtp_password": "dein-passwort",
|
||||
"from_email": "deine.email@web.de",
|
||||
"to_email": "deine.email@web.de"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Schritt 3: Test
|
||||
|
||||
```bash
|
||||
python scripts/utils/notifier.py --test
|
||||
```
|
||||
|
||||
Prüfe deinen E-Mail-Posteingang! 📧
|
||||
|
||||
---
|
||||
|
||||
## 🔔 Beide Kanäle aktivieren
|
||||
|
||||
Für maximale Zuverlässigkeit:
|
||||
|
||||
```json
|
||||
{
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"bot_token": "YOUR_BOT_TOKEN",
|
||||
"chat_id": "YOUR_CHAT_ID"
|
||||
},
|
||||
"email": {
|
||||
"enabled": true,
|
||||
"smtp_server": "smtp.gmail.com",
|
||||
"smtp_port": 587,
|
||||
"smtp_user": "your.email@gmail.com",
|
||||
"smtp_password": "YOUR_APP_PASSWORD",
|
||||
"from_email": "your.email@gmail.com",
|
||||
"to_email": "your.email@gmail.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📬 Benachrichtigungs-Typen
|
||||
|
||||
### 1. Tipps generiert
|
||||
|
||||
**Wann:** Nach erfolgreicher Tipp-Generierung
|
||||
|
||||
**Telegram/E-Mail:**
|
||||
```
|
||||
🎲 NEUE EUROJACKPOT-TIPPS GENERIERT
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📊 Anzahl Tipps: 10
|
||||
⏰ Zeitpunkt: 2025-11-25 09:00
|
||||
|
||||
🏆 BESTER TIPP (höchste Confidence):
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🔢 Hauptzahlen: 3-23-29-32-41
|
||||
⭐ Eurozahlen: 8-9
|
||||
📈 Strategie: HYBRID-OPT
|
||||
💎 Confidence: 39.16%
|
||||
|
||||
💡 Alle Tipps findest du in der CSV-Datei!
|
||||
|
||||
Viel Glück! 🍀
|
||||
```
|
||||
|
||||
### 2. Ziehung ausgewertet
|
||||
|
||||
**Wann:** Nach Verarbeitung einer neuen Ziehung
|
||||
|
||||
**Telegram/E-Mail:**
|
||||
```
|
||||
🎰 EUROJACKPOT-ZIEHUNG AUSGEWERTET
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📅 Datum: 2025-11-21
|
||||
|
||||
🎲 GEZOGENE ZAHLEN:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🔢 Hauptzahlen: 5-8-21-37-46
|
||||
⭐ Eurozahlen: 6-8
|
||||
|
||||
🎊 DEINE BESTEN TREFFER:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🔢 Hauptzahlen: 3 Treffer
|
||||
⭐ Eurozahlen: 1 Treffer
|
||||
🎯 Gesamt: 4 Treffer
|
||||
📊 Bewertung: Sehr gut!
|
||||
|
||||
📈 DURCHSCHNITT ALLER TIPPS:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🔢 Main: 1.2 Treffer
|
||||
⭐ Euro: 0.8 Treffer
|
||||
|
||||
💡 Details im Performance-Report!
|
||||
```
|
||||
|
||||
### 3. Fehler-Benachrichtigung
|
||||
|
||||
**Wann:** Bei System-Fehlern (nur via Telegram für schnelle Reaktion)
|
||||
|
||||
**Telegram:**
|
||||
```
|
||||
❌ FEHLER IM EUROJACKPOT-SYSTEM
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📍 Kontext: Tipp-Generierung
|
||||
🔴 Fehler: Connection timeout
|
||||
|
||||
💡 Bitte System-Logs prüfen!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Troubleshooting
|
||||
|
||||
### Telegram-Bot antwortet nicht
|
||||
|
||||
**Problem:** Test-Nachricht kommt nicht an
|
||||
|
||||
**Lösung:**
|
||||
1. Überprüfe Bot Token und Chat ID
|
||||
2. Stelle sicher, dass du `/start` an deinen Bot gesendet hast
|
||||
3. Teste manuell:
|
||||
```bash
|
||||
curl "https://api.telegram.org/bot<YOUR_TOKEN>/sendMessage?chat_id=<YOUR_CHAT_ID>&text=Test"
|
||||
```
|
||||
|
||||
### E-Mail kommt nicht an
|
||||
|
||||
**Problem:** Test-E-Mail wird nicht empfangen
|
||||
|
||||
**Lösung:**
|
||||
1. Prüfe Spam-Ordner
|
||||
2. Bei Gmail: Stelle sicher, dass du ein **App-Passwort** verwendest (nicht dein normales Passwort)
|
||||
3. Teste SMTP-Verbindung:
|
||||
```bash
|
||||
python3 -c "
|
||||
import smtplib
|
||||
server = smtplib.SMTP('smtp.gmail.com', 587)
|
||||
server.starttls()
|
||||
server.login('your@email.com', 'your-app-password')
|
||||
print('✅ Verbindung erfolgreich!')
|
||||
server.quit()
|
||||
"
|
||||
```
|
||||
|
||||
### Gmail: "Username and Password not accepted"
|
||||
|
||||
**Ursache:** Du verwendest dein normales Passwort statt App-Passwort
|
||||
|
||||
**Lösung:**
|
||||
1. Aktiviere 2-Faktor-Authentifizierung
|
||||
2. Erstelle App-Passwort (siehe oben)
|
||||
3. Verwende das 16-stellige App-Passwort in der Config
|
||||
|
||||
### Keine Benachrichtigungen trotz Config
|
||||
|
||||
**Mögliche Ursachen:**
|
||||
1. `enabled: false` in der Config
|
||||
2. Fehlende oder ungültige Credentials
|
||||
3. Netzwerkprobleme
|
||||
|
||||
**Debug:**
|
||||
```bash
|
||||
# Teste direkt
|
||||
python scripts/utils/notifier.py --test
|
||||
|
||||
# Prüfe Config
|
||||
cat config/notifications.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Sicherheit
|
||||
|
||||
### Config-Datei schützen
|
||||
|
||||
Die `notifications.json` enthält sensible Daten (Bot Token, Passwörter).
|
||||
|
||||
**Best Practices:**
|
||||
|
||||
1. **Nie committen:**
|
||||
```bash
|
||||
# .gitignore
|
||||
config/notifications.json
|
||||
```
|
||||
|
||||
2. **Permissions setzen:**
|
||||
```bash
|
||||
chmod 600 config/notifications.json
|
||||
```
|
||||
|
||||
3. **Backups verschlüsseln:**
|
||||
```bash
|
||||
# Backup erstellen
|
||||
cp config/notifications.json config/notifications.json.backup
|
||||
|
||||
# Verschlüsseln (optional)
|
||||
openssl enc -aes-256-cbc -salt -in config/notifications.json.backup -out config/notifications.json.backup.enc
|
||||
```
|
||||
|
||||
### App-Passwörter verwenden
|
||||
|
||||
- **Niemals** dein Haupt-E-Mail-Passwort in Scripts verwenden
|
||||
- Immer App-spezifische Passwörter erstellen
|
||||
- Bei Verdacht auf Kompromittierung: App-Passwort sofort widerrufen
|
||||
|
||||
---
|
||||
|
||||
## 💡 Tipps & Tricks
|
||||
|
||||
### Benachrichtigungen nur für wichtige Events
|
||||
|
||||
Nur Ziehungsergebnisse (keine Tipp-Generierung):
|
||||
|
||||
1. Editiere `scripts/automation/weekly_tip_generator.py`
|
||||
2. Kommentiere Zeilen 178-194 aus (Benachrichtigungs-Block)
|
||||
|
||||
### Mehrere Empfänger (E-Mail)
|
||||
|
||||
```json
|
||||
{
|
||||
"email": {
|
||||
"to_email": "empfaenger1@example.com, empfaenger2@example.com"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Stille Stunden (keine Benachrichtigungen nachts)
|
||||
|
||||
Füge in `notifier.py` hinzu:
|
||||
|
||||
```python
|
||||
from datetime import datetime
|
||||
|
||||
def _should_send(self):
|
||||
hour = datetime.now().hour
|
||||
# Keine Benachrichtigungen zwischen 22:00 und 08:00
|
||||
if hour >= 22 or hour < 8:
|
||||
return False
|
||||
return True
|
||||
```
|
||||
|
||||
### Telegram Gruppen-Chat
|
||||
|
||||
Statt persönlicher Chat ID kannst du auch eine Gruppen-ID verwenden:
|
||||
|
||||
1. Erstelle Telegram-Gruppe
|
||||
2. Füge deinen Bot hinzu
|
||||
3. Sende `/start@your_bot_name` in der Gruppe
|
||||
4. Hole Gruppen-ID via getUpdates (Format: `-123456789`, negativ!)
|
||||
|
||||
---
|
||||
|
||||
## 📱 Beispiel-Nachrichten
|
||||
|
||||
### Montag 09:00 - Tipps generiert
|
||||
|
||||
> 🎲 **NEUE EUROJACKPOT-TIPPS GENERIERT**
|
||||
>
|
||||
> 📊 10 Tipps für Dienstag-Ziehung bereit!
|
||||
>
|
||||
> 🏆 Bester Tipp: 3-23-29-32-41 + 8-9
|
||||
> Confidence: 39.16% (HYBRID-OPT)
|
||||
>
|
||||
> Viel Glück! 🍀
|
||||
|
||||
### Dienstag 21:00 - Ergebnis
|
||||
|
||||
> 🎰 **ZIEHUNG VOM 2025-11-25**
|
||||
>
|
||||
> Gezogene Zahlen: 5-8-21-37-46 + 6-8
|
||||
>
|
||||
> 🎊 Dein bester Tipp: **4 Treffer!**
|
||||
> (3 Main + 1 Euro)
|
||||
>
|
||||
> Sehr gut! 📈
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checkliste
|
||||
|
||||
- [ ] Telegram Bot erstellt (@BotFather)
|
||||
- [ ] Bot Token kopiert
|
||||
- [ ] Chat ID ermittelt (via getUpdates oder @userinfobot)
|
||||
- [ ] `config/notifications.json` erstellt
|
||||
- [ ] Telegram aktiviert (`enabled: true`)
|
||||
- [ ] Test-Nachricht erfolgreich (`python scripts/utils/notifier.py --test`)
|
||||
- [ ] (Optional) E-Mail konfiguriert
|
||||
- [ ] (Optional) Gmail App-Passwort erstellt
|
||||
- [ ] (Optional) E-Mail-Test erfolgreich
|
||||
- [ ] Config-Datei gesichert (`chmod 600`)
|
||||
- [ ] In `.gitignore` eingetragen
|
||||
|
||||
---
|
||||
|
||||
## 🆘 Support
|
||||
|
||||
Bei Problemen:
|
||||
|
||||
1. **Teste manuell:**
|
||||
```bash
|
||||
python scripts/utils/notifier.py --test
|
||||
```
|
||||
|
||||
2. **Prüfe Logs:**
|
||||
```bash
|
||||
tail -100 logs/tips_generation.log
|
||||
tail -100 logs/auto_update.log
|
||||
```
|
||||
|
||||
3. **Validiere Config:**
|
||||
```bash
|
||||
python3 -c "import json; print(json.load(open('config/notifications.json')))"
|
||||
```
|
||||
|
||||
4. **Telegram API testen:**
|
||||
```bash
|
||||
curl "https://api.telegram.org/bot<TOKEN>/getMe"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version:** 1.0
|
||||
**Erstellt:** 2025-11-25
|
||||
**Kompatibel mit:** Eurojackpot Automation System V1.0
|
||||
@@ -0,0 +1,94 @@
|
||||
# Eurojackpot CSV Processor
|
||||
|
||||
Dieses Python-Script verarbeitet Eurojackpot-Daten in zwei CSV-Dateien:
|
||||
1. **Kombinationsdatei**: Alle möglichen Zahlenkombinationen
|
||||
2. **Gezogene Zahlen**: Bereits gezogene Kombinationen mit Datumsstempel
|
||||
|
||||
Das Script markiert in der ersten Datei alle bereits gezogenen Kombinationen.
|
||||
|
||||
## Dateien
|
||||
|
||||
- `eurojackpot_processor.py` - Hauptscript (automatische Spaltenerkennung)
|
||||
- `eurojackpot_simple.py` - Vereinfachte Version mit festen Spaltenstrukturen
|
||||
- `create_example_files.py` - Erstellt Beispieldateien zum Testen
|
||||
- `README.md` - Diese Anleitung
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
```bash
|
||||
pip install pandas
|
||||
```
|
||||
|
||||
## Verwendung
|
||||
|
||||
### 1. Mit Beispieldaten testen
|
||||
|
||||
```bash
|
||||
# Beispieldateien erstellen
|
||||
python create_example_files.py
|
||||
|
||||
# Hauptscript ausführen
|
||||
python eurojackpot_processor.py alle_kombinationen_beispiel.csv gezogene_zahlen_beispiel.csv ergebnis.csv
|
||||
```
|
||||
|
||||
### 2. Mit eigenen Dateien
|
||||
|
||||
```bash
|
||||
python eurojackpot_processor.py [kombinationen.csv] [gezogene_zahlen.csv] [ausgabe.csv]
|
||||
```
|
||||
|
||||
Oder interaktiv (ohne Parameter):
|
||||
```bash
|
||||
python eurojackpot_processor.py
|
||||
```
|
||||
|
||||
## Datenformat
|
||||
|
||||
### Kombinationsdatei (alle möglichen Kombinationen)
|
||||
```csv
|
||||
Zahl1,Zahl2,Zahl3,Zahl4,Zahl5
|
||||
1,2,3,4,5
|
||||
1,2,3,4,6
|
||||
1,2,3,4,7
|
||||
...
|
||||
```
|
||||
|
||||
### Gezogene Zahlen-Datei
|
||||
```csv
|
||||
Datum,Z1,Z2,Z3,Z4,Z5
|
||||
2023-01-01,5,12,23,34,45
|
||||
2023-01-08,7,14,25,36,47
|
||||
2023-01-15,2,11,22,33,44
|
||||
...
|
||||
```
|
||||
|
||||
### Ausgabedatei (nach Verarbeitung)
|
||||
```csv
|
||||
Zahl1,Zahl2,Zahl3,Zahl4,Zahl5,bereits_gezogen
|
||||
1,2,3,4,5,0
|
||||
5,12,23,34,45,1
|
||||
7,14,25,36,47,1
|
||||
...
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- **Automatische Spaltenerkennung**: Erkennt verschiedene Spaltenbenennungen
|
||||
- **Flexible Eingabe**: Arbeitet mit verschiedenen CSV-Strukturen
|
||||
- **Sortierter Vergleich**: Kombinationen werden sortiert verglichen (1,2,3,4,5 = 5,4,3,2,1)
|
||||
- **Statistiken**: Zeigt Anzahl und Prozentsatz der bereits gezogenen Kombinationen
|
||||
- **Fehlerbehandlung**: Robuste Verarbeitung mit aussagekräftigen Fehlermeldungen
|
||||
|
||||
## Anpassungen
|
||||
|
||||
Das Script erkennt automatisch:
|
||||
- Spalten für Zahlenkombinationen (numerische Spalten oder erste 5 Spalten)
|
||||
- Spalten für gezogene Zahlen (Z1-Z5, oder Spalten mit "Zahl" im Namen)
|
||||
|
||||
Für spezielle Anforderungen können Sie `eurojackpot_simple.py` anpassen.
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Für echte Eurojackpot-Daten (5 aus 50 + 2 aus 12) wären das über 139 Millionen Kombinationen
|
||||
- Das Script kann große Dateien verarbeiten, benötigt aber entsprechend Arbeitsspeicher
|
||||
- Die Kombinationen werden als sortierte Tupel verglichen, um Reihenfolgen-Unabhängigkeit zu gewährleisten
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user