Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.0k

Test Adapter onvif camera v1.x.x

Geplant Angeheftet Gesperrt Verschoben Tester
341 Beiträge 48 Kommentatoren 95.6k Aufrufe 49 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #189

      @chucky666 am einfachsten als docker

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        SaiBot1981
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • Crazy32C Offline
          Crazy32C Offline
          Crazy32
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #193

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

              M 1 Antwort Letzte Antwort
              0
              • Burak HüseyinogluB Offline
                Burak HüseyinogluB Offline
                Burak Hüseyinoglu
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #195

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

                  Burak HüseyinogluB 1 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #196

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

                    T 1 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                        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
                          schrieb am zuletzt editiert von
                          #199

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

                          B 1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            Mars
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • T tombox

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

                                B Nicht stören
                                B Nicht stören
                                bommel_030
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von
                                  #203

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

                                  1 Antwort Letzte Antwort
                                  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
                                    schrieb am zuletzt editiert von
                                    #204

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

                                    B 1 Antwort Letzte Antwort
                                    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 Nicht stören
                                      B Nicht stören
                                      bommel_030
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      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
                                        schrieb am zuletzt editiert von
                                        #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 Antwort Letzte Antwort
                                        0
                                        • T tombox

                                          @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 Nicht stören
                                          B Nicht stören
                                          bommel_030
                                          schrieb am zuletzt editiert von
                                          #207

                                          @tombox
                                          Ich hab ein Basic HTML Widget und dort diesen Inhalt.

                                          <input
                                            type="hidden"
                                            name="webrtc-url"
                                            id="webrtc-url"
                                            value="http://192.168.10.99:8083/stream/27aec28e-6181-4753-9acd-0456a75f0289/channel/0/webrtc"
                                          />
                                          
                                          <video id="webrtc-video" autoplay muted playsinline controls style="max-width: 100%; max-height: 100%;"></video>
                                          
                                          T 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          821

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe