No description
  • Python 57.1%
  • JavaScript 22.1%
  • HTML 12.5%
  • CSS 4.4%
  • Shell 3.9%
Find a file
2026-05-15 07:44:45 +02:00
.claude first init 2026-05-15 07:42:13 +02:00
src/artnet_monitor first init 2026-05-15 07:42:13 +02:00
static first init 2026-05-15 07:42:13 +02:00
templates first init 2026-05-15 07:42:13 +02:00
tests first init 2026-05-15 07:42:13 +02:00
.gitignore first init 2026-05-15 07:42:13 +02:00
config.yaml first init 2026-05-15 07:42:13 +02:00
gunicorn_conf.py first init 2026-05-15 07:42:13 +02:00
INSTALL.md first init 2026-05-15 07:42:13 +02:00
install.sh first init 2026-05-15 07:42:13 +02:00
pyproject.toml first init 2026-05-15 07:42:13 +02:00
QUICKSTART.md first init 2026-05-15 07:42:13 +02:00
README.md edit README 2026-05-15 07:44:45 +02:00
start.sh first init 2026-05-15 07:42:13 +02:00
test.md first init 2026-05-15 07:42:13 +02:00

Art-Net Console Monitor

Ein professionelles Monitoring-Tool zur Überwachung von Chamsys MQ40N Lichtpulten via Art-Net. Erkennt automatisch Freezes und Netzwerkausfälle durch Pattern-Analyse.

Funktionen

  • Art-Net Monitoring: Empfängt Art-Net DMX-Pakete auf Port 6454
  • Pattern-Erkennung: Erkennt wechselnde RGB-Werte als "Heartbeat"
  • Freeze-Erkennung: Alarm wenn Pattern ausbleibt (konfigurierbarer Timeout)
  • Multi-Input: Mehrere Art-Net Universen parallel überwachen
  • Event-Logging: SQLite-Datenbank für Pattern-Start/-Ende-Events
  • Web-Dashboard: Echtzeit-Statusanzeige mit WebSocket-Updates
  • REST API: Vollständige API für Status, Config und Logs
  • Konfigurierbar: YAML-basierte Konfiguration

Technischer Stack

  • Python 3.11+
  • FastAPI (Web-Framework)
  • SQLAlchemy (Datenbank)
  • Pydantic (Validierung)
  • asyncio (Async I/O)
  • WebSocket (Echtzeit-Updates)

Installation

Mit uv (empfohlen)

# uv installieren (falls noch nicht installiert)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Repository klonen
cd artnet-test

# Virtual Environment erstellen und Dependencies installieren
uv venv
source .venv/bin/activate  # Linux/Mac
# oder
.venv\Scripts\activate  # Windows

uv pip install -e .

Mit pip

python -m venv .venv
source .venv/bin/activate
pip install -e .

Konfiguration

Konfigurationsdatei: config.yaml

artnet_receiver:
  bind_address: "0.0.0.0"  # Alle Netzwerk-Interfaces
  port: 6454               # Standard Art-Net Port

pattern_detection:
  no_change_timeout: 7.0   # Sekunden ohne Änderung → Fehler
  tolerance: 5             # RGB-Toleranz für Änderungs-Erkennung

inputs:
  - id: "console_main"
    name: "Chamsys MQ40N - Main Output"
    enabled: true
    universe: 0            # Art-Net Universe
    start_address: 1       # DMX Start-Adresse (1-512)
    red_offset: 0          # Offset relativ zu start_address
    green_offset: 1
    blue_offset: 2
    dimmer_offset: 3       # Optional

database:
  path: "artnet_monitor.db"

logging:
  level: "INFO"
  file: "artnet_monitor.log"

Verwendung

Entwicklung

# Mit uvicorn (Hot-Reload)
uvicorn src.artnet_monitor.main:app --reload --host 0.0.0.0 --port 8000

Produktion

# Mit Gunicorn
gunicorn -c gunicorn_conf.py src.artnet_monitor.main:app

Docker (optional)

docker build -t artnet-monitor .
docker run -p 8000:8000 -p 6454:6454/udp artnet-monitor

Web-Interface

Nach dem Start:

API-Endpunkte

Status

  • GET /api/status/inputs - Alle Input-Status
  • GET /api/status/inputs/{id} - Einzelner Input-Status
  • WS /api/status/ws - WebSocket für Echtzeit-Updates

Logs

  • GET /api/logs/events - Event-Log (mit Filtern)
  • GET /api/logs/summary - Uptime-Statistiken

Konfiguration

  • GET /api/config - Aktuelle Config
  • PUT /api/config - Config aktualisieren
  • POST /api/config/validate - Config validieren

Testing

Art-Net Simulator

Zum Testen ohne echtes Lichtpult:

from src.artnet_monitor.artnet.simulator import ArtNetSimulator, SimulatorPattern
import asyncio

async def test():
    simulator = ArtNetSimulator()
    await simulator.start()

    # Pattern senden (Rot -> Grün -> Blau)
    pattern = SimulatorPattern(
        colors=[(255,0,0), (0,255,0), (0,0,255)],
        interval=1.0  # 1 Sekunde pro Farbe
    )

    await simulator.send_pattern(
        universe=0,
        start_address=1,
        pattern=pattern,
        duration=60.0  # 60 Sekunden
    )

    await simulator.stop()

asyncio.run(test())

Unit-Tests

# Tests ausführen
pytest tests/

# Mit Coverage
pytest --cov=src tests/

Projekt-Struktur

artnet-test/
├── src/artnet_monitor/
│   ├── artnet/          # Art-Net Protokoll
│   ├── monitoring/      # Pattern-Erkennung
│   ├── storage/         # Datenbank
│   ├── config/          # Konfiguration
│   ├── web/             # FastAPI Web-App
│   └── main.py          # Entry Point
├── static/              # Frontend (CSS, JS)
├── templates/           # HTML Templates
├── tests/               # Tests
├── config.yaml          # Konfiguration
└── pyproject.toml       # Dependencies

Troubleshooting

Port 6454 bereits belegt

# Linux: Port prüfen
sudo netstat -tulpn | grep 6454

# Anderen Port in config.yaml verwenden

Keine Art-Net Pakete empfangen

  • Firewall-Einstellungen prüfen
  • Netzwerk-Interface richtig konfiguriert?
  • Lichtpult sendet an richtige IP-Adresse?

Pattern wird nicht erkannt

  • tolerance in config.yaml erhöhen
  • no_change_timeout anpassen
  • Logs prüfen: tail -f artnet_monitor.log

Development

# Development-Dependencies installieren
uv pip install -e ".[dev]"

# Code formatieren
ruff format src/

# Linting
ruff check src/

Deployment

Systemd Service (Linux)

# /etc/systemd/system/artnet-monitor.service
[Unit]
Description=Art-Net Monitor
After=network.target

[Service]
Type=notify
User=artnet
WorkingDirectory=/opt/artnet-monitor
ExecStart=/opt/artnet-monitor/.venv/bin/gunicorn -c gunicorn_conf.py src.artnet_monitor.main:app
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl enable artnet-monitor
sudo systemctl start artnet-monitor
sudo systemctl status artnet-monitor

Lizenz

MIT License

Autor

Stefan Gärtner

Support

Bei Fragen oder Problemen bitte ein Issue auf GitHub erstellen.

7afcac4 (first init)