Image widget via Longpoll aktualisieren?

Begonnen von Lobot, 20 Dezember 2016, 16:49:14

Vorheriges Thema - Nächstes Thema

Lobot

Moin zusammen!

Ich bin bisher gescheitert, den RTSP Stream meiner Überwachungskamera in FTUI zu integrieren.

Deswegen habe ich ein wenig mit der Snapshot-Funktion von IPCAM gespielt.

Einbinden des letzten Snapshots als Image ist sowohl über data-device, als auch data-url kein Problem.

Schade ist nur, dass man scheinbar nur einen permanenten refresh der URL einstellen kann.

Gibt ein einen Weg, das Bild vielleicht bei Bedarf via Longpoll zu aktualisieren?

IPCAM erzeugt beim Reading "last" automatisch ein Event, sobald ein neues Bild gemacht wird. Damit sollte sich dann doch eigentlich ein automatisches refresh bei einer neuen Aufnahmen auslösen lassen, ohne dass der permanente refresh über "data-refresh" laufen muss.

Hat jemand eine Idee?

Eingebunden ist das Image aktuell wie folgt:


<div data-type="image"
    data-device="Cam1"
    data-get="last"
    data-path="../snapshots/cam1/"
    data-size="85%"
data-fhem-cmd="get Cam1 image"
class="nocache">
</div>


Gruß, Martin

paul79

Hallo Martin,

ich habe da auch eine ganze weil gesucht und nichts gefunden den RTSP Stream anzeigen zu können.

Ich habe jetzt eine Lösung mit einem Button der den Refrech ein und aus schaltet sonst macht die Cam den Refresh immer und das gefällt mir nicht zu viel Traffic.

Ein Teil der Schritte sind auch hier aus dem Forum aber etwas abgewandelt.

Man braucht 1x IPCAM, 1x Dummy Schalter, 2x Notify, 1x AT

1. IPCAM: aufpassen das der storage Pfad von der root ausgeht!

define upCam1 IPCAM 192.168.16.XX
attr upCam1 basicauth admin:XXXXXXX
attr upCam1 cmd01 /web/cgi-bin/hi3510/param.cgi?cmd=setmdattr&-enable=1&-name=1
attr upCam1 cmd02 /web/cgi-bin/hi3510/param.cgi?cmd=setmdattr&-enable=0&-name=1
attr upCam1 cmdPanLeft /cgi-bin/hi3510/param.cgi?cmd=ptzctrl&-step=0&-act=left&-speed=45
attr upCam1 cmdPanRight /cgi-bin/hi3510/param.cgi?cmd=ptzctrl&-step=0&-act=right&-speed=45
attr upCam1 cmdPos01 /cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-status=1&-number=1
attr upCam1 cmdPos02 /cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-status=1&-number=2
attr upCam1 cmdPos03 /cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-status=1&-number=3
attr upCam1 cmdPos04 /cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-status=1&-number=4
attr upCam1 cmdPosHome /cgi-bin/hi3510/param.cgi?cmd=preset&-act=home&-speed=45
attr upCam1 cmdTiltDown /cgi-bin/hi3510/param.cgi?cmd=preset&-act=down&-speed=45
attr upCam1 cmdTiltUp /cgi-bin/hi3510/param.cgi?cmd=preset&-act=up&-speed=45
attr upCam1 path /web/tmpfs/auto.jpg
attr upCam1 room 087_upCam
attr upCam1 snapshots 2
attr upCam1 storage /var/www/html/upcam


2. Der Dummy Schalter: er wird benötigt um aus der Tablet UI rauszukommen.


define upCam1_an_aus dummy
attr upCam1_an_aus room 087_upCam
attr upCam1_an_aus webCmd on:off


3. 1x Notify on: löscht das attr disable aus dem AT Modul upCam1_at und setzt ein AT Befehl zum ausschalten des Cam refresh nach 5 min.

define Dummy_upCam1_an notify upCam1_an_aus:on {fhem ("deleteattr upCam1_at disable")}{fhem("defmod CloseupCam1refreshAt1 at +00:05:00 set upCam1_an_aus off")}
attr Dummy_upCam1_an room 087_upCam


4. 1x Notify off: er setzt das attr disable im AT Modul upCam1_at damit der Cam refresh aufhört.

define Dummy_upCam1_aus notify upCam1_an_aus:off {fhem ("attr upCam1_at disable 1")}
attr Dummy_upCam1_aus room 087_upCam


5. 1x AT: das upCam1_at löst den eigentlichen refresh aller 2 Sekunden auf der Cam aus.

define upCam1_at at +*00:00:02 get upCam1 image
attr upCam1_at disable 1
attr upCam1_at room 087_upCam


6. Noch in Tablet UI das rein und fertig.

<!-- ============= Kamera ============ -->
<!-- ====================================== -->
<li class="semitransparent3d" data-row="2" data-col="2" data-sizex="4" data-sizey="3">
<header class="semitransparentheader">Kamera</header>
<div data-type="image"
data-url="http://192.168.16.xx/upcam/upCam1_snapshot_1.jpg"
data-nocache="true"
data-refresh="2"
data-size="58%"
    class="top-space" >
</div>
</li>

<li class="semitransparent3d" data-row="3" data-col="6" data-sizex="1" data-sizey="1">
<header class="semitransparentheader">Kamera an/aus</header>
<div data-type="switch" class="top-space"
data-device="upCam1_an_aus"
data-icon="oa-it_camera"
data-get-on="on.*"
data-set-on="on"
data-on-color="#009933"
data-off-color="#FAA460"></div>
</li>


Man schaltet über eine Button einen Dummy Schalter der von 2 Notify überwacht wird und die Notifyer aktivieren oder deaktivieren das AT Modul welches den refresh der Cam auslöst.

Ich hoffe du kannst mir folgen und man sollte nicht unter 2 Sekunden gehen mit dem Refresh sonst hat man halbe Bilder (Bilder sind schon gelöscht bevor die angezeigt werden.)

Gruß Paul

FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

Lobot

Hey Paul,

vielen Dank für die ausführliche Anleitung!

Ich werde mich da zwischen den Jahren mal dran setzen und schauen, ob ich damit klarkomme ;D

Gruß, Martin

chris1284

#3
ZitatSchade ist nur, dass man scheinbar nur einen permanenten refresh der URL einstellen kann.
, ohne dass der permanente refresh über "data-refresh" laufen muss.

was stört am refresh, es ist quasi das slebe wie wenn du den stream einbinden würdest wie du es ja eigentlich vor hattest? er aktualisiert wirklich nur das cam bild oder hast du zu hause im lan keine datenflat^^

ich habe das selbe problem und binde einfach den schnapshot (mehrere cams sogar) ein und lasse ihn alle 2 sekunden von der tui aktualisieren = ergebnis ein fast video. ipcam dazwischen war mir a) zuviel aufwand und b) zu räge.

Zitat<div data-type="image" class="cell centered" data-url="http://[]ip/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx&" data-size="90%" data-refresh="2" data-nocache="true" ></div>

als url nimmt du einfach die die du sonst bei IPCAM konfiguriren würdes. da brauchts dann auch keine 5 fhemdevice....... zudem erzeugt das 2sekunden at in fhem unnötig last in fhem

achso, ich habe es dann auch noch als popup verbaut (miniaturansicht ist quasie der bilderstream und popup das bild in groß

Zitat
<header>Webcam Dach</header>
<div data-type="popup" data-width="1300px" data-height="810px">
       <div data-type="image" class="cell centered" data-url="http://ip/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx&" data-size="90%" data-refresh="5" data-nocache="true" ></div>
       <div class="dialog">
      <header>Webcam Dach PopUp</header>
           <div data-type="image" class="cell centered" data-url="http://ip/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx&" data-size="100%" data-nocache="true" ></div>
       </div>
</div>

paul79

Zitat von: chris1284 am 22 Dezember 2016, 07:39:17
<div data-type="image" class="cell centered" data-url="http://[]ip/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx&" data-size="90%" data-refresh="2" data-nocache="true" ></div>

Hallo,

bei mir, ich habe eine upCam, war es immer das Problem mit der Übergabe von User und Passwort es gab nur ein Browser der es unterstütz aber nicht unter Android.
Die Schreibweise bei upCam ist auch ganz anders als bei anderen Cams, es muss wohl an upCam liegen.

Deswegen habe ich so eine komische Lösung aber so geht's auch.

Gruß Paul
FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

sinus61

Zitat von: chris1284 am 22 Dezember 2016, 07:39:17
was stört am refresh, es ist quasi das slebe wie wenn du den stream einbinden würdest wie du es ja eigentlich vor hattest? er aktualisiert wirklich nur das cam bild oder hast du zu hause im lan keine datenflat^^

Das Thema gab es ja vor einiger Zeit schon mal, wenn man ein Kamerabild über das Image Widget mit url und refresh einbindet und in einem Popup öffnet läuft der refresh auch nach schließen des Popup weiter, weil es eigentlich nur ausgeblendet wird. Das hat setstate ja auch so bestätigt. Ist auch im LAN nicht ganz sinnvoll. Daher wäre es ganz praktisch wenn man den refresh auch über ein Reading Steuern könnte.

Lobot

Moin!

Ich hab jetzt durch bissel Testen und Recherchieren erreicht, dass ich den Substream meiner Hikvision, direkt ansprechen und live streamen kann:


<div data-type="image"
data-url="http://192.168.x.x/Streaming/channels/1/preview?[b]auth=xxxxxxx[/b]"
data-size="70%"
class="nocache">
</div>


Besonders nützlich war ein Tipp hier aus dem Forum, user:pass via https://www.base64encode.org/ in auth=xxxx umzuwandeln, damit die Authentifizierung funktioniert. Zudem musste der Substream meiner Kamera auf mpeg umgestellt werden.

Jetzt gibt es aber noch ein weiteres Problem.

Der Substream der Kamera kann immer nur von einem Client genutzt werden. Hat sich jemand auf den Stream eingeloggt, kann niemand anderes in nutzen, bis die Verbindung wieder geschlossen wurde.

Wenn ich jetzt in FTUI via Pagebutton auf die Seite des Streams und dann wieder weg gehe, wird der Stream nicht wieder geschlossen, sondern weiterhin abgerufen. Ein Popup löst das Problem auch nicht. Somit komme ich mit dem zweiten Tablet nicht an den Stream, sobald er einmal geöffnet wurde.

Hat jemand eine Idee, wie man das lösen könnte?

Am einfachsten und ressourcenschonendsten wäre vermutlich wirklich ein Aktualisieren via Longpoll aus dem Fhem Device der Kamera bei Bedarf im 1-2 Sekundentakt.

Gruß, Martin