Ein spezialisierter Telegram-Bot, der CSV-Dateien von Purpl Pro Cannabis-Analysegeräten verarbeitet und professionelle Berichte mit Thermodruck-Funktionen generiert.
Der Purpl Pro ist ein tragbares Cannabis-Analysegerät, das schnelle und genaue Messungen von THC, CBD, Feuchtigkeit und anderen wichtigen Cannabinoid-Werten liefert. Seine mobile App kann CSV-Daten exportieren, die über Telegram geteilt werden können.
- 📁 ZIP-Datei-Verarbeitung: Lade ZIP-Dateien mit CSV-Exporten der Purpl Pro Mobile App hoch
- 📊 ASCII-Tabellen-Generierung: Konvertiert Purpl Pro CSV-Daten zu mobil-freundlichen Tabellen
- 📋 Professionelle Analyseberichte: Generiert Berichte für THC, CBD, Feuchtigkeit und Wasseraktivität aus Purpl Pro Messungen
- 🖨️ Thermodrucker-Integration: Direkter Druck auf EPSON-Thermodrucker
- 📱 Interaktive Buttons: Klicke um individuelle Probenberichte zu generieren
- 🔍 Intelligente Spaltenerkennung: Erkennt automatisch Name-, THC-, CBD-, Feuchtigkeits- und Zeitstempel-Spalten aus Purpl Pro Exporten
- Node.js (v14 oder höher)
- npm oder yarn
- Ein Telegram Bot Token (von @BotFather)
- Purpl Pro Gerät mit Mobile App für CSV-Export
-
Projekt klonen oder herunterladen
-
Abhängigkeiten installieren
npm install
-
Umgebungsdatei erstellen
cp .env.example .env
-
Bot-Token konfigurieren
- Öffne die
.envDatei - Ersetze
your_telegram_bot_token_heremit deinem echten Bot-Token - Hole dir deinen Bot-Token von @BotFather auf Telegram
- Öffne die
-
Zugangskontrolle für Druckfunktion konfigurieren
- Setze
AUTHORIZED_USERSauf eine kommagetrennte Liste von autorisierten Telegram-Benutzer-IDs für die Druckfunktion - Um eine Benutzer-ID zu erhalten, lass sie eine beliebige Nachricht an den Bot senden (ID wird in den Logs angezeigt)
- Leer lassen oder Variable entfernen um allen Benutzern das Drucken zu erlauben
- Hinweis: Alle anderen Funktionen (CSV-Upload, Tabellen-Anzeige, Bericht-Generierung) sind ohne Autorisierung verfügbar
- Setze
-
Thermodrucker konfigurieren (optional)
- Setze
THERMAL_PRINTER_IPauf die IP-Adresse deines Druckers - Setze
THERMAL_PRINTER_PORTauf den Port deines Druckers (normalerweise 9100) - Platziere
bonlogo.pngim Projektroot für Logo-Druck
- Setze
-
PurplBot starten
# Entwicklungsmodus mit Auto-Neustart npm run dev # Produktionsmodus mit PM2 npm run pm2:start:prod # Oder einfacher Produktionsmodus npm start
- Öffne Telegram und suche nach @BotFather
- Starte einen Chat und sende
/newbot - Folge den Anweisungen um deinen Bot zu erstellen
- Kopiere den Bot-Token, der von BotFather bereitgestellt wird
- Füge ihn in deine
.envDatei ein
- Starte den Bot mit dem
/startBefehl - Exportiere CSV-Daten aus der Purpl Pro Mobile App
- Lade die ZIP-Datei mit den CSV-Exporten hoch
- Erhalte ASCII-Tabellen für jede CSV-Datei in der ZIP
Sende eine ZIP-Datei mit Purpl Pro CSV-Exporten an den Bot:
👤 Benutzer: [Sendet purpl-pro-export.zip]
🤖 Bot: ⏳ Verarbeite deine ZIP-Datei...
🤖 Bot: ✅ 3 CSV-Datei(en) gefunden. Konvertiere zu Tabellen...
Der Bot antwortet mit ASCII-Tabellen und interaktiven Buttons:
🤖 Bot: 📄 probe-001.csv
┌──────────────┬──────────┬──────────┬──────────┐
│ Name │ THC │ CBD │ Feuchtig │
├──────────────┼──────────┼──────────┼──────────┤
│ Green Crack │ 18.5 │ 0.8 │ 12.3 │
│ Blue Dream │ 22.1 │ 1.2 │ 11.8 │
│ OG Kush │ 19.7 │ 0.5 │ 13.1 │
└──────────────┴──────────┴──────────┴──────────┘
📊 3 Ergebnisse
📋 Klicke einen Button für einen Bericht zu Name
[📋 Bericht Green Crack] [📋 Bericht Blue Dream] [📋 Bericht OG Kush]
Klicke auf einen "Bericht" Button:
👤 Benutzer: [Klickt "📋 Bericht Green Crack"]
🤖 Bot: 📋 Generiere Bericht...
🤖 Bot: [Sendet Analysebericht als Bild - siehe sample-report.png]
📋 Analysebericht für Name: Green Crack
Generiert aus: probe-001.csv
[🖨️ Drucken]
Klicke auf den "Drucken" Button für Thermodruck mit Logo:
👤 Benutzer: [Klickt "🖨️ Drucken"]
🤖 Bot: 🖨️ Sende an Drucker...
🤖 Bot: ✅ Bericht erfolgreich gedruckt für Name: Green Crack
Beispiel des generierten Analyseberichts:
Thermoprinbericht-Ausgabe:
- Logo (bonlogo.png) wird oben gedruckt
- Professioneller Analysebericht mit allen Messwerten
- Saubere Formatierung für 58mm Thermodrucker
- Dateitypen: ZIP-Dateien mit CSV-Dateien aus Purpl Pro Mobile App
- Dateigröße: Bis zu 20MB (Telegram-Limitation)
- Mehrere CSVs: Verarbeite mehrere CSV-Dateien aus einer ZIP
- Große Tabellen: Kürzt automatisch große Tabellen für bessere Lesbarkeit
/start- Willkommensnachricht und Anweisungen/help- Hilfeinformationen anzeigen
- EPSON-Thermodrucker mit Netzwerkschnittstelle
- Standard-Konfiguration: TCP/IP-Verbindung über Port 9100
-
Netzwerk-Einrichtung
- Verbinde deinen Thermodrucker mit dem Netzwerk
- Notiere die IP-Adresse des Druckers
- Stelle sicher, dass Port 9100 erreichbar ist
-
Umgebungs-Konfiguration
# In deiner .env Datei THERMAL_PRINTER_IP=10.10.10.24 THERMAL_PRINTER_PORT=9100 -
Optionales Logo
- Platziere
bonlogo.pngim Projektroot-Verzeichnis - Logo wird oben auf jedem Bericht gedruckt
- Platziere
- EPSON TM-T20II
- EPSON TM-T82II
- EPSON TM-T88V
- Verifiziere Drucker-IP-Adresse und Netzwerkverbindung
- Prüfe dass Port 9100 offen und erreichbar ist
- Stelle sicher dass der Drucker im ESC/POS-Modus ist
- Teste mit
ping <drucker_ip>undtelnet <drucker_ip> 9100
BOT_TOKEN: Dein Telegram-Bot-Token (erforderlich)NODE_ENV: Umgebungsmodus (developmentoderproduction)WEBHOOK_DOMAIN: Domain für Webhook-Modus (nur Produktion)PORT: Port für Webhook-Server (Standard: 3000)THERMAL_PRINTER_IP: IP-Adresse des Thermodruckers (Standard: 192.168.1.100)THERMAL_PRINTER_PORT: Port des Thermodruckers (Standard: 9100)
- Zeilenlimit: Maximum 50 Zeilen pro Tabelle angezeigt
- Spaltenbreite: Begrenzt auf 20 Zeichen für mobile Lesbarkeit
- Dateigröße: 20MB Maximum (Telegram-Bot-Limitation)
- Nachrichtenlänge: Tabellen werden geteilt wenn sie Telegrams 4096-Zeichen-Limit überschreiten
Für Produktions-Deployment mit Webhooks:
- Setze
NODE_ENV=productionin deiner.env - Setze
WEBHOOK_DOMAINauf deine Domain - Deploye auf einen Server mit aktiviertem HTTPS
- Konfiguriere nginx Reverse Proxy (siehe nginx Einrichtung unten)
- Der Bot wird automatisch den Webhook-Modus verwenden
Für VPS-Deployment mit nginx:
-
Nginx-Konfiguration kopieren:
sudo cp nginx.conf.example /etc/nginx/sites-available/purplbot
-
Konfiguration bearbeiten:
sudo nano /etc/nginx/sites-available/purplbot # Ersetze 'your-domain.com' mit deiner echten Domain -
Seite aktivieren:
sudo ln -s /etc/nginx/sites-available/purplbot /etc/nginx/sites-enabled/
-
SSL-Zertifikat erhalten (mit Let's Encrypt):
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your-domain.com
-
Nginx testen und neustarten:
sudo nginx -t sudo systemctl restart nginx
- Heroku: Einfaches Deployment mit automatischem HTTPS
- Railway: Einfaches Node.js-Deployment
- VPS mit Nginx: Vollständige Kontrolle mit Reverse Proxy (empfohlen)
- Vercel/Netlify: Serverless-Deployment (benötigt Webhook-Setup)
purplbot/
├── bot.js # Haupt-Bot-Logik
├── package.json # Abhängigkeiten und Skripte
├── .env.example # Umgebungsvorlage
├── .env # Deine Umgebungsvariablen (erstelle diese)
├── README.md # Diese Datei
└── temp/ # Temporäre Dateien (automatisch erstellt)
- telegraf: Telegram Bot API Framework
- yauzl: ZIP-Datei-Extraktion
- csv-parser: CSV-Parsing
- cli-table3: ASCII-Tabellen-Generierung
- dotenv: Umgebungsvariablen-Management
PurplBot behandelt verschiedene Fehlerfälle:
- Ungültige Dateitypen (Nicht-ZIP-Dateien)
- Große Dateien (>20MB)
- Beschädigte ZIP-Dateien
- Leere ZIP-Dateien
- Ungültiges CSV-Format
- Netzwerkfehler
Gerne kannst du Issues und Pull Requests einreichen um PurplBot zu verbessern!
MIT Lizenz - verwende diesen Code gerne für deine eigenen Projekte.

