[Announce] VDR Plugin eventpub

  • Das Plugin habe ich für mich geschrieben, weil ich (nicht nur aus dem VDR) Events senden will und andere Systeme auf diese Events reagieren sollen.
    Ich habe mir verschiedene Konfigurationen angesehen, u.a. Kafka, ActiveMQ, blazingmq und nein... alles viel zu schwergewichtig und zu kompliziert und im Falle blazingmq ist der Build gewöhnungsbedürftig. Dann bin ich über NATS gestolpert und habe mich spontanverliebt. Extrem leichtgewichtig, kaum Abhängigkeiten und erfüllt alle meine Erwartungen.

    Die Homepage des Plugins und die Dokumentation befindet sich auf Github: https://github.com/Zabrimus/vdr-plugin-eventpub.

    Zum Plugin:
    Aus dem VDR heraus werden messages gesendet (aktuell bisher nur über cStatus generiert), die dann von irgendwelchen Consumern im Netz gelesen und verarbeitet werden können. Dazu muss ein NATS Server (oder in meinem Fall sogar ein Cluster) installiert werden. Die einfache Installation habe ich auf der Homepage des Plugins beschrieben.

    Die möglichen Messages haben ein Subject, die von den Consumern gefiltert werden können. Entweder global vdr.> oder nur bestimmte vdr.recording.end.*. Im Setup des Plugins kann eingestellt werden, welche Messages mit welcher TTL (time to live) erzeugt werden sollen. Dazu wird Jetstream zur Persistenz im NATS Server verwendet. So kann ich speichern lassen, wann z.B welcher Timer angelegt/gelöscht wird, welche Aufnahmen wann gestartet und beendet werden - ohne die VDR immer im Auge haben zu müssen. Mein TTL liegt bei 720 Stunden, also kann ich die Aktivitäten über einen Monat lang verfolgen (natürlich nur Timer und Recording, die anderen lasse ich nicht senden).

    Es gibt bestimmt eine Begrenzung für die Anzahl der Consumer, wo auch immer diese liegen mag.

    Im Verzeichnis nats-receiver befindet sich ein NATS Client, der genutzt werden kann um für bestimmte Subjects ein Script aufzurufen mit allen notwendigen Parametern.

    Ich habe 2 völlig getrennte VDR Aufnahmeserver (sowohl Video als auch Timer) und markad in jeweils eigenen Containern. Im Verzeichnis nats-receiver/markad befinden sich ein Beispielscript und eine systemd Unit. Der nats-receiver wurde auf das Subject vdr.recording.stop.* konfiguriert. Und damit wird jetzt markad aufgerufen, sobald eine Aufnahme beendet wurde (unabhängig vom Aufnahmeserver) und die Aufnahmen werden sequentiell der Reihe nach geschnitten.

    Für das Gegenstück eventsub überlege ich noch, was sinnvoll ist. Ziel ist eine bessere Vernetzung der VDR und die Möglichkeit auf bestimmte Ereignisse flexibel reagieren zu können oder auch die Konfiguration aller VDR zu vereinfachen. Ich denke da z.B. an den Abgleich der channels.conf in allen VDR.

  • Geht das nur mir so, oder ist die Dokumentation in https://natsbyexample.com/examples/auth/sys-account/cli bzw. https://github.com/Zabrimus/vdr-p…r-configuration fehlerhaft?

    Code
    accounts: {
      \$SYS: {
        users: [{user: sys, password: pass}]
      }
    }

    Bei mir funktioniert die Kommunikation mit dem Server über nats nur, wenn ich den Backslash vor $SYS weglasse.

    In den bisherigen Ubuntu-Versionen sind die Pakete für die Nutzung von jetstream zu alt, da muss ich mal schauen, was zurückportierbar ist.

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Bei mir funktioniert die Kommunikation mit dem Server über nats nur, wenn ich den Backslash vor $SYS weglasse.

    Ich denke, du hast das cat << EOF > /etc/nats-server.conf am Anfang übersehen. Ansonsten wird $SYS ersetzt durch einen höchstwahrscheinlich leeren String. Im File muss aber tatsächlich $SYS stehen.

    In den bisherigen Ubuntu-Versionen sind die Pakete für die Nutzung von jetstream zu alt, da muss ich mal schauen, was zurückportierbar ist.

    Für Jetstream und vor allen Dingen TTL sollten unbedingt die neueren Server verwendet werden, da im Server einiges diesbezüglich gefixed wurde.

  • Ah, das wird ja noch von der Shell evaluiert :dösen

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Wie kann ich das denn am besten debuggen, wenn das Plugin beim Senden von Events einen generischen Fehler wirft? So etwas wie

    Code
    Nov 07 11:33:24 yavdr-noble-vm vdr[5446]: [5446] [eventpub] js_PublishMsg: 1 - Error

    ist leider nicht so aussagekräftig ... - ich habe die libnats.c Bibliothek in Version 3.11 von Ubuntu 25.10 genommen und die hat klaglos gebaut.

    Ich kann auch grundsätzlich mit einem Python-Skript unter anderem Namen/Subject über Jetstream Nachrichten von dem selben Rechner aus absetzen:

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • [eventpub] js_PublishMsg: 1 - Error

    Wenn der soweit gekommen ist, dann soll nur noch die Nachricht gesendet werden. Die Connection, die Message und alles andere hat funktioniert.
    Ich habe einen Verdacht: Hast du eine TTL im Setup konfiguriert oder steht die noch bei 0? Ich probiere es direkt mal aus.

    Edit: Jup. TTL 0 wirft genau den Fehler. Ich fix das.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!