Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter onvif camera v1.x.x

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    905

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Test Adapter onvif camera v1.x.x

Scheduled Pinned Locked Moved Tester
341 Posts 48 Posters 101.3k Views 49 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T tombox

    @heimweh Sollte nach ca 30min wieder funktionieren..
    Hast du schon den reolink adapter getestet

    HeimwehH Offline
    HeimwehH Offline
    Heimweh
    wrote on last edited by
    #187

    @tombox ok solange hab ich nicht gewartet. Ich starte den Adapter jetzt per Script 2 Minuten nach Kamera Start neu... ja den Reolink hab ich auch - der kann aber nur Motion allgemein - mir geht es speziell um die Personenerkennung, sonst geht bei jedem Igel / Katze nachts die Flutbeleuchtung an...

    1 Reply Last reply
    0
    • T tombox

      Hi ich habe ein neuen Adapter für ONVIF Kameras geschrieben, da die bisherigen Adapter nicht mehr gewartet werden und ich kein snapshot bei meiner Kamera erhalten habe.

      Zum Installieren:
      https://github.com/iobroker-community-adapters/ioBroker.onvif

      Für die aktuelle Version bitte das latest Repo auswählen:

      2d049982-5353-4202-a33f-996f344bd4ae-image.png

      Kameras hinzufügen

      Discovery:

      Bei jedem Adapterstart wird mit dem in der Einstellungen eingetragen Benutzername und Passwort eine Discovery durchgeführt und versuch sich in die Kamera einzuloggen. Falls die Kamera noch nicht unter Objekte hinzugefügt wurde.

      In den Einstellungen kann man die Discovery manuell ausführen. Falls die Kameras unterschiedliche Zugangsdaten haben müssen die jeweils eingegeben werden und eine discovery durchgeführt werden. Im Log sieht man Details zu dem Prozess.

      Damit eine Kamera neu erkannt wird muss sie einfach unter Objekte gelöscht werden.

      Manuelle Suche

      Es können Kameras manuell gesucht werden, falls Discovery nicht funktioniert. Dazu muss eine IP Range und Ports eingegeben und manuell ausgeführt werden. Im Log sieht man Details zu dem Prozess.

      Datenpunkte

      onvif.0.IP_PORT.events Events der Kamera wie z.b. Bewegungserkennung

      onvif.0.IP_PORT.general Generelle Information über die Kameras

      onvif.0.IP_PORT.infos Informationen über die Kamera werden nur bei Adapterstart aktualisiert oder bei remote.refresh

      Video und Snapshot URL:
      onvif.0.IP_PORT.infos.streamUris.MediaProfile_Channel1_MainStream.snapshotUrl.uri

      onvif.0.IP_PORT.remote Steuerung der Kamera

      onvif.0.IP_PORT.remote.refresh Aktualisierung der Infodaten

      onvif.0.IP_PORT.remote.gotoHomePosition PTZ Kamera in die HomePosition setzen

      onvif.0.IP_PORT.remote.gotoPreset PTZ Kamera Preset Nummer auswählen

      onvif.0.IP_PORT.remote.snapshot Speichert ein snapshot unter onvif.0.IP_PORT.snapshot

      Message

      Adapter nimmt Message "snapshot" entgegen und gibt ein Bild zurück

      sendTo("onvif.0", "snapshot", "192_168_178_100_80", (result) => {
        if (result) {
          sendTo("telegram.0", {
            text: result,
            type: "photo",
            caption: "Kamera 2",
          });
        }
      });
      

      Bewegungsmeldung zu Telegram

      on("onvif.0.192_168_178_100_80.events.RuleEngine/CellMotionDetector/Motion", (obj) => {
        if (obj.state.val === true) {
          sendTo("onvif.0", "snapshot", "192_168_178_100_80", (result) => {
            if (result) {
              sendTo("telegram.0", {
                text: result,
                type: "photo",
                caption: "Camera 2",
              });
            }
          });
        }
      });
      

      Snapshot Server in vis einbinden

      Der Adapter bietet ein Snapshot Server ohne Passwort an. Dazu Server aktivieren in den Instanzeinstellungen und dann kann der aktuelle Snapshot http://iobrokerIp:8095/CAMERAIP_PORT z.B. http://192.168.0.1:8095/192_168_0_1_80 abgerufen werden.

      In der Vis ein Image Widget einfügen und die Url als Quelle angeben und eine Updatezeit auswählen

      c59c6c74-01c1-4472-84c9-cc477d49a75c-image.png

      Stream in vis einbinden

      go2rtsp Docker

      Ein Stream wird normalerweise via rtsp stream bereitgestellt. Eine Umwandlung via motion eye ist sehr resourcen aufwändig und hat ein Verzögerng. Ein Umwandlung in webrtc ist schneller und resourcenschonender. Meine Empfehlung ist ein go2rtsp. Dazu muss ein Docker von alexxit/go2rtc erstellt werden.
      https://hub.docker.com/r/alexxit/go2rtc

      Oder go2rtc lokal zu installieren:
      https://www.youtube.com/watch?v=4VEEpRYerZg
      https://forum.iobroker.net/post/1031526

       image: alexxit/go2rtc
          network_mode: host       # important for WebRTC, HomeKit, UDP cameras
          privileged: true         # only for FFmpeg hardware transcoding
          restart: unless-stopped  # autorestart on fail or config change from WebUI
          environment:
            - TZ=Europe/Berlin  # timezone in logs
          volumes:
            - "~/go2rtc:/config"   # folder for go2rtc.yaml file (edit from WebUI)
      

      Es muss ein Volume für den Pfad /config und das network als host eingestellt werden.

      Dann ist go2rtsp erreichbar über

      http://IP:1984
      

      Dann kann man ein Stream hinzufügen. Die Stream url findet man z.B. unter
      onvif.0.IP_PORT.infos.streamUris.ProfileName.live_stream_tcp.uri

      6c837e18-5f5d-4b92-94df-b752208f139b-image.png

      Stream als iFrame einfügen

      Das Widget iFrame in der Vis hinzufügen und als Quelle den stream link von go2rtsp verwenden

      http://192.168.178.1:1984/stream.html?src=camera&mode=webrtc

      Unter links kann noch die Art des Players ausgewählt werden (Mikrofon)

      Rtsp2Web Docker

      Eine Alternative ist ein RTSPtoWeb Docker. Dies ist aber von der Einrichtun komplizierter.
      Dazu muss ein Docker von ghcr.io/deepch/rtsptoweb:latest erstellt werden.

      docker run --name rtsp-to-web -v /YOURPATHFORCONFIG:/config --network host ghcr.io/deepch/rtsptoweb:latest
      

      Es muss ein Volume für den Pfad /config und das network als host eingestellt werden.

      Dann ist rtsptoweb erreichbar über

      http://IP:8083
      

      Dann kann man ein Stream hinzufügen. Die Stream url findet man z.B. unter
      onvif.0.IP_PORT.infos.streamUris.ProfileName.live_stream_tcp.uri

      <img src="addstream.png" height="600">

      Danach benötigen wir die Stream Id. Dafür Stream Edit und in der URL die Id rauskopieren

      http://192.168.178.2:8083/pages/stream/edit/ddbdb583-9f80-4b61-bafa-613aa7a5daa5

      Einzelnen Stream in der Vis einfügen

      Dann in der vis ein HTML Objekt auswählen. Dann im Widget unter HTML den rtsp2web server mit stream id eintragen:

      <img src="html.png" height="150">

      Wenn mehrere Stream hinzugefügt werden soll muss webrtc-url und webrtc-video in html und skript mit einer neuen id ersetzt werden z.B. webrtc-url2 und webrtc-video2

      <input
        type="hidden"
        name="webrtc-url"
        id="webrtc-url"
        value="http://192.168.0.2:8083/stream/ddbdb583-9f80-4b61-bafa-613aa7a5daa5/channel/0/webrtc"
      />
      
      <video id="webrtc-video" autoplay muted playsinline controls style="max-width: 100%; max-height: 100%;"></video>
      

      In dem Widget unter Skripte dieses Skript hinzufügen:

      setTimeout(function () {
        function startPlay(videoEl, url) {
          const webrtc = new RTCPeerConnection({
            iceServers: [
              {
                urls: ["stun:stun.l.google.com:19302"],
              },
            ],
            sdpSemantics: "unified-plan",
          });
          webrtc.ontrack = function (event) {
            console.log(event.streams.length + " track is delivered");
            videoEl.srcObject = event.streams[0];
            videoEl.play();
          };
          webrtc.addTransceiver("video", { direction: "sendrecv" });
          webrtc.onnegotiationneeded = async function handleNegotiationNeeded() {
            const offer = await webrtc.createOffer();
      
            await webrtc.setLocalDescription(offer);
      
            fetch(url, {
              method: "POST",
              body: new URLSearchParams({ data: btoa(webrtc.localDescription.sdp) }),
            })
              .then((response) => response.text())
              .then((data) => {
                try {
                  webrtc.setRemoteDescription(new RTCSessionDescription({ type: "answer", sdp: atob(data) }));
                } catch (e) {
                  console.warn(e);
                }
              });
          };
      
          const webrtcSendChannel = webrtc.createDataChannel("rtsptowebSendChannel");
          webrtcSendChannel.onopen = (event) => {
            console.log(`${webrtcSendChannel.label} has opened`);
            webrtcSendChannel.send("ping");
          };
          webrtcSendChannel.onclose = (_event) => {
            console.log(`${webrtcSendChannel.label} has closed`);
            startPlay(videoEl, url);
          };
          webrtcSendChannel.onmessage = (event) => console.log(event.data);
        }
      
        const videoEl = document.querySelector("#webrtc-video");
        const webrtcUrl = document.querySelector("#webrtc-url").value;
      
        startPlay(videoEl, webrtcUrl);
      }, 1000);
      

      <img src="widgetskript.png" height="200">

      Alle Streams als iFrame

      Alternativ könnte man auch den Kamera Overview als Iframe einfügen:
      Das Widget iFrame hinzufügen und als Quelle den rtsp2web Server eintragen:

      http://192.168.0.2:8083/pages/multiview/full?controls

      FFMpeg Unterstützung

      Wenn die Kamera keine Snapshot Unterstützng hat wird mit ffmpeg ein snapshot aus dem rtsp stream erzeugt.

      Snapshot Server in vis einbinden

      Der Adapter bietet ein Snapshot Server ohne Passwort an. Dazu Server aktivieren in den Instanzeinstellungen und dann kann der aktuelle Snapshot http://iobrokerIp:8095/CAMERAIP_PORT z.B. http://192.168.0.1:8095/192_168_0_1_80 abgerufen werden.

      In der Vis ein Image Widget einfügen und die Url als Quelle angeben und eine Updatezeit auswählen

      Snapshot in vis einbinden

      Wenn möglich die snapshotUri verwenden z.B.
      onvif.0.IP_PORT.infos.streamUris.MediaProfile_Channel1_MainStream.snapshotUrl.uri

      Den Datenpunkt nicht als Stream verwenden, da sonst die Festplatte zu hohe Last hat.

      Den Datenpunkt aktualisieren via t onvif.0.IP_PORT.remote.snapshot

      Den Datenpunkt onvif.0.IP_PORT.snapshot ein String img src element zuordnen
      8c6904b2-e6b0-4489-bf83-0aef733cd86a-image.png

      Oder als Alternative falls String img src nicht funktioniert
      Den Datenpunkt onvif.0.IP_PORT.snapshot als HTML element in die vis einfügen mit folgendem Inhalt

      <img src="{onvif.0.IP_PORT.snapshot}" width="500px" />
      

      e09e2094-73ce-40c4-b966-6be58108c6f3-image.pnghttps://forum.iobroker.net/assets/uploads/files/1679400558520-37e68385-d60b-495f-b443-09fe53242663-grafik.png

      chucky666C Online
      chucky666C Online
      chucky666
      wrote on last edited by
      #188

      @tombox Hallo Zusammen,
      erstmal Danke für den Adapter .
      wie kann ich Rtsptoweb auf Debian(Proxmox VM) installieren ? wollte Motioneye löschen

      T 1 Reply Last reply
      0
      • chucky666C chucky666

        @tombox Hallo Zusammen,
        erstmal Danke für den Adapter .
        wie kann ich Rtsptoweb auf Debian(Proxmox VM) installieren ? wollte Motioneye löschen

        T Offline
        T Offline
        tombox
        wrote on last edited by
        #189

        @chucky666 am einfachsten als docker

        1 Reply Last reply
        0
        • S Offline
          S Offline
          SaiBot1981
          wrote on last edited by
          #190

          moin, also dein adapter ist soweit echt cool. doch meine DLINK Kameras werden zwar gefunden aber die bewegungsmeldung kommt irgendwie nicht an.

          ich bekomme auch bei jedem start diese meldung bei alle 3 kameras.

          
          onvif.0
          2023-07-15 22:41:43.268	warn	No presets found for 192.168.178.100:80 Error: Wrong ONVIF SOAP response
          
          onvif.0
          2023-07-15 22:41:43.186	error	No status found for 192.168.178.100:80 Error: Wrong ONVIF SOAP response
          
          onvif.0
          2023-07-15 22:41:43.184	error	Data: undefined xml: undefined
          
          onvif.0
          2023-07-15 22:41:42.459	error	Error: ONVIF SOAP Fault: Method 'GetServiceCapabilities' not implemented: method name or namespace not recognized
          
          onvif.0
          2023-07-15 22:41:42.458	error	Failed to get ServiceCapabilities
          
          onvif.0
          2023-07-15 22:41:42.130	error	Error: ONVIF SOAP Fault: Method 'GetServices' not implemented: method name or namespace not recognized
          
          onvif.0
          2023-07-15 22:41:42.129	error	Failed to get Services
          

          manuell den shnapshoot pfad auch schon erstellt

          hast du noch ne idee?

          1 Reply Last reply
          0
          • Crazy32C Offline
            Crazy32C Offline
            Crazy32
            wrote on last edited by
            #191

            Moin allerseits. Erstmal Danke für den Adapter.

            Ich lese damit eine Reolink Outdoor E1 aus. Im Objektbaum sind die Datenpunkte auch zu sehen. Allerdings aktualiseren sich die Datenpunkte ab einer Zeit X nicht mehr, als ob sich der Adapter aufhängt. Nach Neustart des Adapters werden die Datenpunkte bei Bewegung auch auf True gesetzt. Das habe ich erstmal mit einem stündlichen Neustart des Adapters gelöst.

            Mein größeres Problem ist meine Beleuchtung über der Haustür. Ich möchte den People detect als Auslöser für die Beleuchtung nutzen. Funktioniert auch gut, Personen werden von der Reolink eigentlich 100% erkannt und das Licht wird eingeschaltet.
            Das Ausschalten erfolgt allerdings irgendwie zufällig. Ich habe ein einfaches Blockly Script erstellt, nach dem sich die Beleuchtung nach 2 Minuten über einen Shelly 1 wieder ausschaltet. Meistens schaltet sie sich aber früher ab, mal nach ein paar Sekunden, mal bleibt sie etwas länger an. Ich habe echt kleinen Plan woran das liegen könnte. Hat diesen Effekt noch jemand von euch? Wäre toll, wenn da jemand helfen könnte.

            Screenshot 2023-08-06 125359.png

            M 1 Reply Last reply
            0
            • Crazy32C Crazy32

              Moin allerseits. Erstmal Danke für den Adapter.

              Ich lese damit eine Reolink Outdoor E1 aus. Im Objektbaum sind die Datenpunkte auch zu sehen. Allerdings aktualiseren sich die Datenpunkte ab einer Zeit X nicht mehr, als ob sich der Adapter aufhängt. Nach Neustart des Adapters werden die Datenpunkte bei Bewegung auch auf True gesetzt. Das habe ich erstmal mit einem stündlichen Neustart des Adapters gelöst.

              Mein größeres Problem ist meine Beleuchtung über der Haustür. Ich möchte den People detect als Auslöser für die Beleuchtung nutzen. Funktioniert auch gut, Personen werden von der Reolink eigentlich 100% erkannt und das Licht wird eingeschaltet.
              Das Ausschalten erfolgt allerdings irgendwie zufällig. Ich habe ein einfaches Blockly Script erstellt, nach dem sich die Beleuchtung nach 2 Minuten über einen Shelly 1 wieder ausschaltet. Meistens schaltet sie sich aber früher ab, mal nach ein paar Sekunden, mal bleibt sie etwas länger an. Ich habe echt kleinen Plan woran das liegen könnte. Hat diesen Effekt noch jemand von euch? Wäre toll, wenn da jemand helfen könnte.

              Screenshot 2023-08-06 125359.png

              M Offline
              M Offline
              Mars
              wrote on last edited by Mars
              #192

              @crazy32
              Ich habe dasselbe Problem wie du mit einer Reolink doorbell bei der ich das Klingeltaster Signal abgreife. Dieses wird nach Neustart des adapters zuverlässig Umgestellt bei Tastendruck aber nach Zeit X nicht mehr und ein Neustart ist erforderlich.
              An was kann das liegen? Hat jemand einen Tipp wo ich ansetzen könnte? Das mit dem stündlichen Neustart des Adapters ist ein funktionierender Workarround.

              Wie realisiert man einen Neustart eines Adapters @Crazy32 ?

              Vielen Dank für eure Rückmeldungen!

              T 1 Reply Last reply
              0
              • M Mars

                @crazy32
                Ich habe dasselbe Problem wie du mit einer Reolink doorbell bei der ich das Klingeltaster Signal abgreife. Dieses wird nach Neustart des adapters zuverlässig Umgestellt bei Tastendruck aber nach Zeit X nicht mehr und ein Neustart ist erforderlich.
                An was kann das liegen? Hat jemand einen Tipp wo ich ansetzen könnte? Das mit dem stündlichen Neustart des Adapters ist ein funktionierender Workarround.

                Wie realisiert man einen Neustart eines Adapters @Crazy32 ?

                Vielen Dank für eure Rückmeldungen!

                T Offline
                T Offline
                tombox
                wrote on last edited by
                #193

                @mars mal i debug log laufen lassen dann sollte alle 30min kommen "Reconnecting to XXXXX" kommt das bei dir

                M 1 Reply Last reply
                0
                • Burak HüseyinogluB Offline
                  Burak HüseyinogluB Offline
                  Burak Hüseyinoglu
                  wrote on last edited by Burak Hüseyinoglu
                  #194

                  Hallo zusammen, ich verwende die BU-320 Kamera, die bei Amazon oft verkauft werden. Ich habe bemerkt, dass ich keine Events bekomme bei ioBroker. Sind diese Kameras dafür nicht geeignet oder mache ich da etwas falsch? Der Events folder ist immer leer, obwohl ich auch Motion Events generiere

                  8eb61cae-12d7-4394-887a-01b14df6af26-image.png

                  af4637cd-13a3-45f4-88f4-9dae2ff2c132-image.png

                  T 1 Reply Last reply
                  0
                  • Burak HüseyinogluB Burak Hüseyinoglu

                    Hallo zusammen, ich verwende die BU-320 Kamera, die bei Amazon oft verkauft werden. Ich habe bemerkt, dass ich keine Events bekomme bei ioBroker. Sind diese Kameras dafür nicht geeignet oder mache ich da etwas falsch? Der Events folder ist immer leer, obwohl ich auch Motion Events generiere

                    8eb61cae-12d7-4394-887a-01b14df6af26-image.png

                    af4637cd-13a3-45f4-88f4-9dae2ff2c132-image.png

                    T Offline
                    T Offline
                    tombox
                    wrote on last edited by
                    #195

                    @burak-hüseyinoglu Mal den debug log aktiveren und schauen was so passiert

                    Burak HüseyinogluB 1 Reply Last reply
                    0
                    • T tombox

                      @burak-hüseyinoglu Mal den debug log aktiveren und schauen was so passiert

                      Burak HüseyinogluB Offline
                      Burak HüseyinogluB Offline
                      Burak Hüseyinoglu
                      wrote on last edited by
                      #196

                      @tombox iobroker.current.log.html
                      habs mal hier hochgeladen, pw's sind test pw's

                      T 1 Reply Last reply
                      0
                      • T tombox

                        @mars mal i debug log laufen lassen dann sollte alle 30min kommen "Reconnecting to XXXXX" kommt das bei dir

                        M Offline
                        M Offline
                        Mars
                        wrote on last edited by
                        #197

                        @tombox ich habe das Log Level auf debug gestellt für den ONVIF Adapter und konnte keine Nachricht finden mit dem "Reconnecting" Stichwort.

                        T 1 Reply Last reply
                        0
                        • Burak HüseyinogluB Burak Hüseyinoglu

                          @tombox iobroker.current.log.html
                          habs mal hier hochgeladen, pw's sind test pw's

                          T Offline
                          T Offline
                          tombox
                          wrote on last edited by tombox
                          #198

                          @burak-hüseyinoglu ist ein wenig kurz über längerer zeit mit eventuellen events wäre gut

                          und mit onvif device manager testen ob der events sieht

                          1 Reply Last reply
                          0
                          • M Mars

                            @tombox ich habe das Log Level auf debug gestellt für den ONVIF Adapter und konnte keine Nachricht finden mit dem "Reconnecting" Stichwort.

                            T Offline
                            T Offline
                            tombox
                            wrote on last edited by
                            #199

                            @mars schick mal ein log über 1h per mail zu
                            tombox2020@gmail.com

                            B 1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              Mars
                              wrote on last edited by
                              #200

                              @Crazy32
                              ich habe den ONVIF Adapter aus Github neu installiert. Das Problem scheint jetzt gelöst. Ist das bei dir jetzt auch funktionsfähig?

                              1 Reply Last reply
                              0
                              • T tombox

                                Hi ich habe ein neuen Adapter für ONVIF Kameras geschrieben, da die bisherigen Adapter nicht mehr gewartet werden und ich kein snapshot bei meiner Kamera erhalten habe.

                                Zum Installieren:
                                https://github.com/iobroker-community-adapters/ioBroker.onvif

                                Für die aktuelle Version bitte das latest Repo auswählen:

                                2d049982-5353-4202-a33f-996f344bd4ae-image.png

                                Kameras hinzufügen

                                Discovery:

                                Bei jedem Adapterstart wird mit dem in der Einstellungen eingetragen Benutzername und Passwort eine Discovery durchgeführt und versuch sich in die Kamera einzuloggen. Falls die Kamera noch nicht unter Objekte hinzugefügt wurde.

                                In den Einstellungen kann man die Discovery manuell ausführen. Falls die Kameras unterschiedliche Zugangsdaten haben müssen die jeweils eingegeben werden und eine discovery durchgeführt werden. Im Log sieht man Details zu dem Prozess.

                                Damit eine Kamera neu erkannt wird muss sie einfach unter Objekte gelöscht werden.

                                Manuelle Suche

                                Es können Kameras manuell gesucht werden, falls Discovery nicht funktioniert. Dazu muss eine IP Range und Ports eingegeben und manuell ausgeführt werden. Im Log sieht man Details zu dem Prozess.

                                Datenpunkte

                                onvif.0.IP_PORT.events Events der Kamera wie z.b. Bewegungserkennung

                                onvif.0.IP_PORT.general Generelle Information über die Kameras

                                onvif.0.IP_PORT.infos Informationen über die Kamera werden nur bei Adapterstart aktualisiert oder bei remote.refresh

                                Video und Snapshot URL:
                                onvif.0.IP_PORT.infos.streamUris.MediaProfile_Channel1_MainStream.snapshotUrl.uri

                                onvif.0.IP_PORT.remote Steuerung der Kamera

                                onvif.0.IP_PORT.remote.refresh Aktualisierung der Infodaten

                                onvif.0.IP_PORT.remote.gotoHomePosition PTZ Kamera in die HomePosition setzen

                                onvif.0.IP_PORT.remote.gotoPreset PTZ Kamera Preset Nummer auswählen

                                onvif.0.IP_PORT.remote.snapshot Speichert ein snapshot unter onvif.0.IP_PORT.snapshot

                                Message

                                Adapter nimmt Message "snapshot" entgegen und gibt ein Bild zurück

                                sendTo("onvif.0", "snapshot", "192_168_178_100_80", (result) => {
                                  if (result) {
                                    sendTo("telegram.0", {
                                      text: result,
                                      type: "photo",
                                      caption: "Kamera 2",
                                    });
                                  }
                                });
                                

                                Bewegungsmeldung zu Telegram

                                on("onvif.0.192_168_178_100_80.events.RuleEngine/CellMotionDetector/Motion", (obj) => {
                                  if (obj.state.val === true) {
                                    sendTo("onvif.0", "snapshot", "192_168_178_100_80", (result) => {
                                      if (result) {
                                        sendTo("telegram.0", {
                                          text: result,
                                          type: "photo",
                                          caption: "Camera 2",
                                        });
                                      }
                                    });
                                  }
                                });
                                

                                Snapshot Server in vis einbinden

                                Der Adapter bietet ein Snapshot Server ohne Passwort an. Dazu Server aktivieren in den Instanzeinstellungen und dann kann der aktuelle Snapshot http://iobrokerIp:8095/CAMERAIP_PORT z.B. http://192.168.0.1:8095/192_168_0_1_80 abgerufen werden.

                                In der Vis ein Image Widget einfügen und die Url als Quelle angeben und eine Updatezeit auswählen

                                c59c6c74-01c1-4472-84c9-cc477d49a75c-image.png

                                Stream in vis einbinden

                                go2rtsp Docker

                                Ein Stream wird normalerweise via rtsp stream bereitgestellt. Eine Umwandlung via motion eye ist sehr resourcen aufwändig und hat ein Verzögerng. Ein Umwandlung in webrtc ist schneller und resourcenschonender. Meine Empfehlung ist ein go2rtsp. Dazu muss ein Docker von alexxit/go2rtc erstellt werden.
                                https://hub.docker.com/r/alexxit/go2rtc

                                Oder go2rtc lokal zu installieren:
                                https://www.youtube.com/watch?v=4VEEpRYerZg
                                https://forum.iobroker.net/post/1031526

                                 image: alexxit/go2rtc
                                    network_mode: host       # important for WebRTC, HomeKit, UDP cameras
                                    privileged: true         # only for FFmpeg hardware transcoding
                                    restart: unless-stopped  # autorestart on fail or config change from WebUI
                                    environment:
                                      - TZ=Europe/Berlin  # timezone in logs
                                    volumes:
                                      - "~/go2rtc:/config"   # folder for go2rtc.yaml file (edit from WebUI)
                                

                                Es muss ein Volume für den Pfad /config und das network als host eingestellt werden.

                                Dann ist go2rtsp erreichbar über

                                http://IP:1984
                                

                                Dann kann man ein Stream hinzufügen. Die Stream url findet man z.B. unter
                                onvif.0.IP_PORT.infos.streamUris.ProfileName.live_stream_tcp.uri

                                6c837e18-5f5d-4b92-94df-b752208f139b-image.png

                                Stream als iFrame einfügen

                                Das Widget iFrame in der Vis hinzufügen und als Quelle den stream link von go2rtsp verwenden

                                http://192.168.178.1:1984/stream.html?src=camera&mode=webrtc

                                Unter links kann noch die Art des Players ausgewählt werden (Mikrofon)

                                Rtsp2Web Docker

                                Eine Alternative ist ein RTSPtoWeb Docker. Dies ist aber von der Einrichtun komplizierter.
                                Dazu muss ein Docker von ghcr.io/deepch/rtsptoweb:latest erstellt werden.

                                docker run --name rtsp-to-web -v /YOURPATHFORCONFIG:/config --network host ghcr.io/deepch/rtsptoweb:latest
                                

                                Es muss ein Volume für den Pfad /config und das network als host eingestellt werden.

                                Dann ist rtsptoweb erreichbar über

                                http://IP:8083
                                

                                Dann kann man ein Stream hinzufügen. Die Stream url findet man z.B. unter
                                onvif.0.IP_PORT.infos.streamUris.ProfileName.live_stream_tcp.uri

                                <img src="addstream.png" height="600">

                                Danach benötigen wir die Stream Id. Dafür Stream Edit und in der URL die Id rauskopieren

                                http://192.168.178.2:8083/pages/stream/edit/ddbdb583-9f80-4b61-bafa-613aa7a5daa5

                                Einzelnen Stream in der Vis einfügen

                                Dann in der vis ein HTML Objekt auswählen. Dann im Widget unter HTML den rtsp2web server mit stream id eintragen:

                                <img src="html.png" height="150">

                                Wenn mehrere Stream hinzugefügt werden soll muss webrtc-url und webrtc-video in html und skript mit einer neuen id ersetzt werden z.B. webrtc-url2 und webrtc-video2

                                <input
                                  type="hidden"
                                  name="webrtc-url"
                                  id="webrtc-url"
                                  value="http://192.168.0.2:8083/stream/ddbdb583-9f80-4b61-bafa-613aa7a5daa5/channel/0/webrtc"
                                />
                                
                                <video id="webrtc-video" autoplay muted playsinline controls style="max-width: 100%; max-height: 100%;"></video>
                                

                                In dem Widget unter Skripte dieses Skript hinzufügen:

                                setTimeout(function () {
                                  function startPlay(videoEl, url) {
                                    const webrtc = new RTCPeerConnection({
                                      iceServers: [
                                        {
                                          urls: ["stun:stun.l.google.com:19302"],
                                        },
                                      ],
                                      sdpSemantics: "unified-plan",
                                    });
                                    webrtc.ontrack = function (event) {
                                      console.log(event.streams.length + " track is delivered");
                                      videoEl.srcObject = event.streams[0];
                                      videoEl.play();
                                    };
                                    webrtc.addTransceiver("video", { direction: "sendrecv" });
                                    webrtc.onnegotiationneeded = async function handleNegotiationNeeded() {
                                      const offer = await webrtc.createOffer();
                                
                                      await webrtc.setLocalDescription(offer);
                                
                                      fetch(url, {
                                        method: "POST",
                                        body: new URLSearchParams({ data: btoa(webrtc.localDescription.sdp) }),
                                      })
                                        .then((response) => response.text())
                                        .then((data) => {
                                          try {
                                            webrtc.setRemoteDescription(new RTCSessionDescription({ type: "answer", sdp: atob(data) }));
                                          } catch (e) {
                                            console.warn(e);
                                          }
                                        });
                                    };
                                
                                    const webrtcSendChannel = webrtc.createDataChannel("rtsptowebSendChannel");
                                    webrtcSendChannel.onopen = (event) => {
                                      console.log(`${webrtcSendChannel.label} has opened`);
                                      webrtcSendChannel.send("ping");
                                    };
                                    webrtcSendChannel.onclose = (_event) => {
                                      console.log(`${webrtcSendChannel.label} has closed`);
                                      startPlay(videoEl, url);
                                    };
                                    webrtcSendChannel.onmessage = (event) => console.log(event.data);
                                  }
                                
                                  const videoEl = document.querySelector("#webrtc-video");
                                  const webrtcUrl = document.querySelector("#webrtc-url").value;
                                
                                  startPlay(videoEl, webrtcUrl);
                                }, 1000);
                                

                                <img src="widgetskript.png" height="200">

                                Alle Streams als iFrame

                                Alternativ könnte man auch den Kamera Overview als Iframe einfügen:
                                Das Widget iFrame hinzufügen und als Quelle den rtsp2web Server eintragen:

                                http://192.168.0.2:8083/pages/multiview/full?controls

                                FFMpeg Unterstützung

                                Wenn die Kamera keine Snapshot Unterstützng hat wird mit ffmpeg ein snapshot aus dem rtsp stream erzeugt.

                                Snapshot Server in vis einbinden

                                Der Adapter bietet ein Snapshot Server ohne Passwort an. Dazu Server aktivieren in den Instanzeinstellungen und dann kann der aktuelle Snapshot http://iobrokerIp:8095/CAMERAIP_PORT z.B. http://192.168.0.1:8095/192_168_0_1_80 abgerufen werden.

                                In der Vis ein Image Widget einfügen und die Url als Quelle angeben und eine Updatezeit auswählen

                                Snapshot in vis einbinden

                                Wenn möglich die snapshotUri verwenden z.B.
                                onvif.0.IP_PORT.infos.streamUris.MediaProfile_Channel1_MainStream.snapshotUrl.uri

                                Den Datenpunkt nicht als Stream verwenden, da sonst die Festplatte zu hohe Last hat.

                                Den Datenpunkt aktualisieren via t onvif.0.IP_PORT.remote.snapshot

                                Den Datenpunkt onvif.0.IP_PORT.snapshot ein String img src element zuordnen
                                8c6904b2-e6b0-4489-bf83-0aef733cd86a-image.png

                                Oder als Alternative falls String img src nicht funktioniert
                                Den Datenpunkt onvif.0.IP_PORT.snapshot als HTML element in die vis einfügen mit folgendem Inhalt

                                <img src="{onvif.0.IP_PORT.snapshot}" width="500px" />
                                

                                e09e2094-73ce-40c4-b966-6be58108c6f3-image.pnghttps://forum.iobroker.net/assets/uploads/files/1679400558520-37e68385-d60b-495f-b443-09fe53242663-grafik.png

                                CybyC Offline
                                CybyC Offline
                                Cyby
                                wrote on last edited by
                                #201

                                @tombox Erstmal super arbeit.
                                Ich konnte den onvif adapter erfolgreich im IOBroker aktivieren und finde auch die Kamera.
                                Ich habe eine Hikam A9 Kamera verbunden und würde nun gerne die Events näher verstehen.
                                Heißt: Wenn eine Bewebung per OnVif als Event erkannt wird, soll eine andere IoBroker Variable den Status true erhalten.
                                Per MotionEye ist gerade die Nachterkennung eher "mäßig" mit der Normalen HiKam app funktioniert aber die personen erkennung und auch der Nachtmodus richtig gut.
                                Kannst du mir erklären, wie genau ich die Events tiefer auswerten kann? Speziell: Bewegung erkannt?
                                Im Forum hatte ich dazu leider nix gefunden.
                                Danke

                                T 1 Reply Last reply
                                0
                                • T tombox

                                  @mars schick mal ein log über 1h per mail zu
                                  tombox2020@gmail.com

                                  B Do not disturb
                                  B Do not disturb
                                  bommel_030
                                  wrote on last edited by
                                  #202

                                  @tombox
                                  Ich hab wie in deiner Anleitung beschrieben RSTPtoWEB installiert und den Livestream im HTML Widget eingebunden.
                                  Wenn ich die einzelne VIS-Seite in der Runtime öffne klappt das auch wunderbar. Oben die "Multiview" unten die "Single View" im HTMl Widget mit Skript.
                                  d676a0f6-7134-43ae-9d46-5aa05a856b99-image.png
                                  Wenn ich das ganze über meine reguläre VIS mit View in Widget aufrufe bleibt das HTML Widget leer, bzw. es werden nur die Player Tasten (ohne Funktion) angezeigt.
                                  76c30c20-5d1f-4d69-9894-ad8c10fbebca-image.png
                                  In der Browserkonsole wird auch kein Fehler angemeckert. Hast du eine Idee woran das liegen könnte?

                                  T 1 Reply Last reply
                                  0
                                  • CybyC Cyby

                                    @tombox Erstmal super arbeit.
                                    Ich konnte den onvif adapter erfolgreich im IOBroker aktivieren und finde auch die Kamera.
                                    Ich habe eine Hikam A9 Kamera verbunden und würde nun gerne die Events näher verstehen.
                                    Heißt: Wenn eine Bewebung per OnVif als Event erkannt wird, soll eine andere IoBroker Variable den Status true erhalten.
                                    Per MotionEye ist gerade die Nachterkennung eher "mäßig" mit der Normalen HiKam app funktioniert aber die personen erkennung und auch der Nachtmodus richtig gut.
                                    Kannst du mir erklären, wie genau ich die Events tiefer auswerten kann? Speziell: Bewegung erkannt?
                                    Im Forum hatte ich dazu leider nix gefunden.
                                    Danke

                                    T Offline
                                    T Offline
                                    tombox
                                    wrote on last edited by
                                    #203

                                    @cyby einfach schauen wie die events Objekte aufgebaut sind und ein Objekt wird bei event auf true gesetzt

                                    1 Reply Last reply
                                    0
                                    • B bommel_030

                                      @tombox
                                      Ich hab wie in deiner Anleitung beschrieben RSTPtoWEB installiert und den Livestream im HTML Widget eingebunden.
                                      Wenn ich die einzelne VIS-Seite in der Runtime öffne klappt das auch wunderbar. Oben die "Multiview" unten die "Single View" im HTMl Widget mit Skript.
                                      d676a0f6-7134-43ae-9d46-5aa05a856b99-image.png
                                      Wenn ich das ganze über meine reguläre VIS mit View in Widget aufrufe bleibt das HTML Widget leer, bzw. es werden nur die Player Tasten (ohne Funktion) angezeigt.
                                      76c30c20-5d1f-4d69-9894-ad8c10fbebca-image.png
                                      In der Browserkonsole wird auch kein Fehler angemeckert. Hast du eine Idee woran das liegen könnte?

                                      T Offline
                                      T Offline
                                      tombox
                                      wrote on last edited by
                                      #204

                                      @bommel_030 mmh eigentlich nicht müsste eigentlich was im log sein wenn du die streams einzeln hinzufügst geht das?

                                      B 1 Reply Last reply
                                      0
                                      • T tombox

                                        @bommel_030 mmh eigentlich nicht müsste eigentlich was im log sein wenn du die streams einzeln hinzufügst geht das?

                                        B Do not disturb
                                        B Do not disturb
                                        bommel_030
                                        wrote on last edited by
                                        #205

                                        @tombox
                                        Sorry schon mal für den Screenshot... Wenn ich eine Seite nur mit dem HTML Stream anlege (im View in Widget) geht es leider auch nicht.
                                        Das sind die Fehler die in der Konsole kommen. Bis auf den markierten kommen die auch bei der "Einzelseite" mit den 2 Streams und dem Snapshot.

                                          const webrtcUrl = document.querySelector("#webrtc-url").value;
                                        

                                        Da kann ich aber keinen Fehler erkennen/verstehen.

                                        3441ce18-393a-41f7-85ef-7c8daf19430e-image.png

                                        T 1 Reply Last reply
                                        0
                                        • B bommel_030

                                          @tombox
                                          Sorry schon mal für den Screenshot... Wenn ich eine Seite nur mit dem HTML Stream anlege (im View in Widget) geht es leider auch nicht.
                                          Das sind die Fehler die in der Konsole kommen. Bis auf den markierten kommen die auch bei der "Einzelseite" mit den 2 Streams und dem Snapshot.

                                            const webrtcUrl = document.querySelector("#webrtc-url").value;
                                          

                                          Da kann ich aber keinen Fehler erkennen/verstehen.

                                          3441ce18-393a-41f7-85ef-7c8daf19430e-image.png

                                          T Offline
                                          T Offline
                                          tombox
                                          wrote on last edited by
                                          #206

                                          @bommel_030 in der vis gibt es nicht ds Objekt mit id webrtc-url hast du ein html mit Objekt
                                          <input
                                          type="hidden"
                                          name="webrtc-url"
                                          id="webrtc-url" ....

                                          angelegt

                                          B 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          314

                                          Online

                                          32.6k

                                          Users

                                          82.2k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe