Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Agentdvr-Aufnahmen in der Visualisierung darstellen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Agentdvr-Aufnahmen in der Visualisierung darstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • David G.
      David G. last edited by David G.

      Ich habe schon länger eine Möglichkeit gesucht die Aufnahmen von AgendDVR in meiner Visualisierung darstellen.

      Das Livebild meiner Cams hab ich schon länger eingebunden.

      Das Thema habe aber lange nicht angepackt, da es für AgendDVR keinen Adapter gibt der einem die benötigten Daten liefert.
      Jedoch habe ich jetzt gesehen, dass AgentDVR eine sehr gut dokumentierte Rest-API hat und habe in Blockly eine Tabelle erstellt.

      Die Tabelle ist respoive und passt sich dem Bildschirm an.

      Screenshot_20250321_181444_Chrom.jpg

      Screenshot_20250321_181514_Chrom.jpg

      Screenshot_20250321_181454_Chrom.jpg

      Auf Wunsch kann man sich über den Icons die Tags zu den Aufnahmen anzeigen lassen.

      Screenshot_20250322_100054_Fully Kiosk Browser.jpg

      Un sich eine Aufnahme anzuschauen, muss man einfach auf eines der Icons drücken.

      Hier gibt es 2 Varianten:

      1. Download des Videos
      2. Öffnen des Videos in einem neuen Tab mit Webplayer (allerdings klappen hier nicht die Videos aller Kameras)

      JPEG_20250321_181616_18924390763.jpg

      Wie funktioniert das Script?

      Folgende Variablen müssen im Blockly ausgefüllt werden:

      Screenshot_20250322_100335_Chrome.jpg

      • groesse_icons_klein_mittel_gross
        - Wie groß die Icons dargesgezwerden sollen, wenn einem keine Größe zusagt kann man es recht weit unten hier anpassen
        Screenshot_20250323_144102_Chrome.jpg

      • show_tags

        • Ob man die Tags der Aufnahmen über die Bilder gelegt bekommen möchte
      • tag_abstand_seitlich

        • Abstand der Tags seitlich
      • tag_abstand_hoehe

        • Abstand der Tags in der Höhe
      • tag_top_bottom

        • Tag oben oder unten ausgerichtet
      • tag_right_left

        • Tag links oder rechts ausgerichtet
      • download_tab

        • Ob das Video runtergeladen werden soll oder im
          Webplayer geöffnet
      • anzahl

        • Anzahl der anzuzeigenden Aufnahmen
      • ip_agentdvr

        • IP von AgendDVR
      • oid

        • Oid der Kamera aus AgendDVR
      • ip_iobroker

        • IP Iobroker

      Die HTML Tabelle wird unten im Script in einen DP geschrieben (nach belieben anpassen) , diesen könnt ihr dann in die Visualisierung eurer Wahl (ich hab es in Lovelace gemacht, da wird die custom:html-template-card benötigt) einbinden.

      Falls ihr die Option gewählt habt, dass das Video in einem neuen Tab im Webpalyer starten soll, sind noch 1-2 Schritte nötig.

      Ihr müsst eine Datei mit dem Namen player.htm über http in eurem Netzwerk freigeben. Ich nutze dazu den Proxy Adapter, jeder andere Weg geht aber auch.

      Ich habe die Datei unter opt/iobroker/html abgelegt und im Proxy Adapter folgende Freigabe angelegt:

      Screenshot_20250322_100646_Chrome.jpg

      Die htm Datei benötigt folgenden Inhalt:

      <!DOCTYPE html>
      <html lang="de">
      <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <title>Video Player</title>
         <script>
             function getUrlParams() {
                 const urlParams = new URLSearchParams(window.location.search);
                 return {
                     videoUrl: urlParams.get("videoUrl"),
                     date: urlParams.get("date"),
                     time: urlParams.get("time"),
                     tags: urlParams.get("tags"),
                     duration: urlParams.get("duration"),
                     size: urlParams.get("size")
                 };
             }
      
             function setVideoSource() {
                 const params = getUrlParams();
                 const videoElement = document.getElementById("videoPlayer");
                 const sourceElement = document.getElementById("videoSource");
                 const infoText = document.getElementById("infoText");
      
                 if (params.videoUrl) {
                     const decodedUrl = decodeURIComponent(params.videoUrl);
                     sourceElement.src = decodedUrl;
                     videoElement.load();  
      
                     // Automatisch starten
                     videoElement.play().catch(error => {
                         console.warn("Autoplay wurde blockiert:", error);
                     });
      
                     infoText.innerHTML = `
                         <strong>Datum:</strong> ${params.date || "Nicht angegeben"}<br>
                         <strong>Uhrzeit:</strong> ${params.time || "Nicht angegeben"}<br>
                         <strong>Tags:</strong> ${params.tags || "Keine Tags"}<br>
                         <strong>Dauer:</strong> ${params.duration ? params.duration + " Sekunden" : "Nicht angegeben"}<br>
                         <strong>Dateigröße:</strong> ${params.size ? params.size + " MB" : "Nicht angegeben"}<br>
                         <strong>Video URL:</strong> <a href="${decodedUrl}" target="_blank">${decodedUrl}</a>
                     `;
                 } else {
                     infoText.textContent = "Keine gültige Video-URL gefunden!";
                     console.error("Keine gültige Video-URL gefunden!");
                 }
             }
      
             window.onload = setVideoSource;
      
             function goBack() {
                 window.history.back();  
             }
         </script>
         <style>
             #infoText {
                 font-weight: bold;
                 color: black;
             }
         </style>
      </head>
      <body>
         <video id="videoPlayer" width="80%" controls autoplay muted>
             <source id="videoSource" src="" type="video/mp4">
             Dein Browser unterstützt dieses Videoformat nicht.
         </video>
         
         <!-- Info-Text zur Anzeige der Video-Details -->
         <p id="infoText"></p>
      
         <!-- Zurück-Button -->
         <button onclick="goBack()" style="margin-top: 20px; padding: 10px; font-size: 16px;">⬅ Zurück</button>
      </body>
      </html>
      

      Falls ihr die Freigabe anders benennt oder die Datei anders freigebt, sucht die URL im Blockly und ändert diese nach euren Vorgaben ab.

      Trigger:
      Ich lasse die Tabelle aktuell von AgendDVR über SimpleApi triggern.
      Dazu habe ich in AgentDVR eine Aktion erstellt, die nach einer Aufnahme eine SimpleApi URL aufruft.

      Screenshot_20250321_183436.jpg

      Bei Aktualisierung des DP (legt euch irgend einen an, am besten im selben Ordner wie der DP für die Tabelle) trigger das Script dann (Trigger im Script anpassen).

      Alternativ könnt ihr natürlich auch einen anderen Trigger nehmen.
      Zu einer bestimmten Uhrzeit, Intervall etc

      Anbei nun das Blockly:
      Eigene_Scripte.VIS.Tabelle_AgentDVR.xml

      Ich bin gespannt, ob bei euch alles klappt.

      EDIT
      Falls noch jemand eine bessere Idee kennt, als das Video im neuen Tab über <video> einzubinden immer her damit. Vom Format her scheint man recht eingeschränkt zu sein. Das motion jpeg meiner billig Kamera klappt Zb nicht (Ich zeichne RAW ohne konvertiung auf, man kann jedoch in AgendDVR auch zu mp4 konvertieren was dann klappt).

      wendy2702 1 Reply Last reply Reply Quote 3
      • wendy2702
        wendy2702 @David G. last edited by

        @david-g gerade durch Zufall auf diesen Thread gestoßen.

        Muss ich mal probieren aber zuerst noch ne andere Frage. Wie machst du die die Object Erkennung in AgentDVR ?

        David G. 1 Reply Last reply Reply Quote 0
        • David G.
          David G. @wendy2702 last edited by David G.

          @wendy2702

          Auf dem Bildern im Post noch mit der ReolinkAI der Kamera.

          Mittlerweile über

          https://www.codeproject.com/Articles/5322557/CodeProject-AI-Server-AI-the-easy-way

          Hab ich als Docker aufgesetzt.
          Kann man dann einfach in AgendDVR konfigurieren.

          wendy2702 1 Reply Last reply Reply Quote 0
          • wendy2702
            wendy2702 @David G. last edited by

            @david-g ok.

            Auf was für einer HW hast du das Laufen und wie ist die Auslastung?

            David G. 1 Reply Last reply Reply Quote 0
            • David G.
              David G. @wendy2702 last edited by David G.

              @wendy2702

              Hab proxmox auf einem i3 2100 am laufen.
              Ohne die Erkennung liegt die VM im Schnitt bei 2,75% Auslastung mit 4 zugewiesenen Kernen.
              Mit Erkennung ca 35%.

              Allerdinhs kann man das mit einer Coral noch stark optimieren. Vom Verbrauch und Reaktionszeit.

              EDIT
              Das Gesamtsystem geht von ca 10% auf ca 27%.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              489
              Online

              31.9k
              Users

              80.2k
              Topics

              1.3m
              Posts

              2
              5
              231
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo