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).

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

      Support us

      ioBroker
      Community Adapters
      Donate

      759
      Online

      31.9k
      Users

      80.1k
      Topics

      1.3m
      Posts

      1
      1
      191
      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