Problem mit Kamerascript aus dem HowTo für Kameraeinbindung

Hallo zusammen,

ich habe mir gerade auf der IPS View Seite das HowTo für die Kameraeinbindung reingezogen und man kann hier eigentlich nichts falsch machen. Jedoch bekomme ich es nicht zum laufen. Man braucht ja „nur“ die korrekte Adresse für den Pictureabgriff der Cam. Diese Adresse funktioniert per Browser und auch per Stringvariable mit HTML Box. (Nur weiß ich nicht wie ich die HMTL Box aktualisieren kann per Timer, sonst hätte ich die HTML Box verwendet)

<img src=„http://BENUTZER:PASSWORD@192.168.2.73//Streaming/channels/2/picture“ style=„width: 100%; height: 100%;“ >


Hier das Script aus dem How To:

<?
	/**
	 * @file          IPSView_CameraImageRefresh.ips.php
	 * @author        brownson
	 * @version
	 *   Version 1.0, 2015-05-02 brownson: Initiale Version<br/>
	 *
	 * Skript um ein MediaImage einer Kamera zu erzeugen und periodisch zu
         * aktualisieren
	 *
	 * Konfiguration Einstellungen:
	 *   CAM_IMAGE_URL       ... URL des Kamera Bildes
	 *   CAM_NAME            ... Name der Kamera
	 *   CAM_REFRESH_SEC     ... Aktualisierungsinterval in Sekunden
	 *
	 */

	/*
	 * Konfiguration:
	 * -------------------------------------------------------------------------
	 */

	define ('CAM_IMAGE_URL',	   'http://BENUTZER:PASSWORD@192.168.2.73//Streaming/channels/2/picture');
	define ('CAM_NAME',			   'vorne');
	define ('CAM_REFRESH_SEC',	   10);

	/*
	 * Programmlogik:
	 * -------------------------------------------------------------------------
	 */
	$scriptID      = $_IPS['SELF'];
	$sender        = $_IPS['SENDER'];
	$parentID      = IPS_GetParent($scriptID);

	$filename = IPS_GetKernelDir().'media/'.CAM_NAME.'.jpg';
	$mediaID  = CreateMedia ('Image', $parentID, $filename);
   CreateTimer_CyclicBySeconds ('RefreshTimer', $scriptID, CAM_REFRESH_SEC);

	$curl_handle=curl_init();
	curl_setopt($curl_handle, CURLOPT_URL, CAM_IMAGE_URL);
	curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 3);
	curl_setopt($curl_handle, CURLOPT_TIMEOUT, 3);
	curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,true);
	curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl_handle, CURLOPT_FAILONERROR, true);
	$fileContent = curl_exec($curl_handle);
	curl_close($curl_handle);

	if ($fileContent===false) {
		IPS_LogMessage(__file__, 'File "'.CAM_IMAGE_URL.'" could NOT be found on the Server !!!');
		return;
	}
	$result = file_put_contents($filename, $fileContent);
	if ($result===false) {
		IPS_Sleep(1000);
		$result = file_put_contents($filename, $fileContent);
	}
	if ($result===false) {
		IPS_LogMessage(__file__, 'Error writing File Content to '.$filename);
		return;
	}

	/*
	 * Funktionen:
	 * -------------------------------------------------------------------------
	 */

	function CreateMedia ($Name, $ParentId, $FileName) {
		$MediaId = @IPS_GetMediaIDByName($Name, $ParentId);
		if ($MediaId === false) {
			$MediaId	= IPS_CreateMedia(1);
			IPS_SetParent($MediaId, $ParentId);
			IPS_SetName($MediaId, $Name);
			IPS_SetPosition($MediaId, 0);
		}
		IPS_SetMediaFile($MediaId, $FileName, false);
		return $MediaId;
	}

	function CreateTimer_CyclicBySeconds ($name, $parentId, $seconds) {
		$timerId = @IPS_GetObjectIDByIdent($name, $parentId);
		if ($timerId === false) {
 			$timerId = IPS_CreateEvent(1 /*Cyclic Event*/);
			IPS_SetParent($timerId, $parentId);
			IPS_SetName($timerId, $name);
			IPS_SetIdent($timerId, $name);
			if (!IPS_SetEventCyclic($timerId, 2 /*Daily*/, 1 /*Int*/,0 /*Days*/,0/*DayInt*/,1/*TimeType Sec*/,$seconds/*Sec*/)) {
				die ("IPS_SetEventCyclic failed !!!");
			}
			IPS_SetEventActive($timerId, true);
			echo 'Created Timer '.$name.'='.$timerId."".PHP_EOL;
		}
		return $timerId;
	}

?>

Fehlermeldung:

oA1NLzV.png

XYvH8UU.png

Jemand eine idee was ich hier flasch mache ?
Meine Cam: Trendnet TV-IP311PI

Gruß
Christian

Hi!

Was mit dem Kamera Skript von Brownson ist, kann ich dir nicht sagen, verwende ich nicht.

Aber wie du deine HTMLBox refreshen kannst, das kann ich dir sagen :slight_smile:

Einfach die ersten beide Zeilen im Skript anpassen (und die URL), einmal von Hand ausführen, fertig :cool:

<?
$VarID = 12345;  // Objekt ID deiner HTMLBox Variable
$IntervallSekunden = 60;  // Dieses Skript alle 60 Sekunden per Timer aufrufen


// Timer setzen auf alle X Sekunden
IPS_SetScriptTimer($_IPS['SELF'], $IntervallSekunden);

// Der String der in die Variable geschrieben wird
$HTML = '<img src="http://BENUTZER:PASSWORD@192.168.2.73//Streaming/channels/2/picture" style="width: 100%; height: 100%;" >';

// Setzt den Inhalt der Variable neu, damit wird auch die HTMLBox automatisch aktualisiert, falls du sie gerade anschaust
SetValueString($VarID, $HTML);
?>

> Ungetestet, nur eben runtergeschrieben. Einfach mal testen und berichten :slight_smile: Durch das neu setzen der Variable, wird an sich die URL nicht aufgerufen, aber ein Variable neu setzen refreshed auch die HTMLBox und das sollte die URL neu aufrufen und ein neues Bild liefern.

Du kannst dieses Skript auch unter deine HTMLBox verlinken im WebFront, dann kannst du einfach drauf drücken und die Ansicht aktualisiert sich.

Sollte das so nicht funktionieren, dann gibt es in IPS noch den ImageGrabber, IPSCam und viele andere Möglichkeiten, um seine Kamera(s) im WebFront/IPSView anzuschauen :slight_smile:

Edit: Ich glaube ich denke wie immer zu kompliziert :smiley: Aber ist ein Ansatz :smiley:

Grüße,
Chris

Danke Dir Chris !!! Dein Script funktioniert perfekt :wink:

Freut mich! Dann hab ich wohl doch nicht zu verwirrt gedacht :smiley:

> Was du noch machen kannst, überwachen auf welcher IPSView Seite du bist, und wenn du auf diese Kamera-Seite gehst, dann das Skript ausführen lassen und das Bild wird direkt aktualisiert :slight_smile: Stichwort bei IPSView > Remotesteuerung … hab ich die Tage schon mal jemand erklärt :slight_smile:

Grüße,
Chris

Warum macht man das ? Damit er nur dann eine Aktualiserung durchführt und nicht dauerhaft ? Ok… werde ich mir mal anschauen ! Danke :slight_smile:

Angenommen du aktualisiert das Bild nur alle 30 Minuten. Du schaust aber nach 15 Minuten auf die Kamera-Seite, dann hast du ein altes Bild. Dann kannst du entweder manuell updaten, oder einfach die Variable überwachen mit der aktuellen Seite auf der man im IPSView ist und dann, wenn man auf der Seite ist, automatisch durch ein Trigger-Event das Skript ausführen und man hat immer wenn man auf die Kamera-Seite geht, das aktuelle Bild :slight_smile:

Grüße,
Chris

Genau, dann hab ich das korrke tinterpretiert.

Was noch schön wäre, wenn IPS bzw. das Ipad das Bild was alle 10 sec nachgeladen wird zwischenpuffern könnte und es „instant“ ersetzen würde. So sieht das Live bisschen blöd aus, denn wenn das Bild nachgeladen wird, wird es kurz schwarz… also ein kurzen flackern von einer halben sec. Im Webfront sieht es noch blöder aus.

Aber ok, wenn wir schon kein rtsp Livestream in IPS / Ipad bekommen muss man da durch :wink:

Ich habe bei mir so Dinge in ein Untermenü verlegt. Und selbst wenn ich schon in der „Über-Menü“ gehe, wird bei mir das Update-Skript angeworfen. Dadurch ist es fertig, bis ich auf den entsprechenden Seite bin :slight_smile: Kann halt auch mal sein, dass ein Update umsonst gelaufen ist, wenn ich dann in ein anderes Untermenü gehe…
…aber irgend einen Tod muss man sterben :wink:

Grüße,
Chris

Hallo Chris,

ich habe gerade feststellen müssen, daß das Cam Bild in der ips view Anzeige mit der Zeit immer weiter zusammengesaucht wird in der Breite und es dadurch immer höher wird, bis man nach vielen 100 aktualisierungen gar nichts mehr erkennt. Sehr sehr merkwürdig. Habe den Aktualiserungsintervall auf 10 Sec. und würde ihn eigentlich auf 2…3 sec. setellen wollen, aber dann sehe ich warscheinlich noch schneller gar nix mehr ^^

EDIT: vielleicht muss ich das Bild nicht mit 100% höhe und Breite in der html Box einbinden, sondern fixe werte vergeben… schade eigentlich… ich werd´s mal testen. So wäre man nur etwas unflexibler. Denn er staucht das Bild so sehr zusammen… ich kann dann scollen im gestauchten / gezoomten Bild. Obwohl in ips view eine feste Breite und Höhe für das Bild festgelegt ist… hmmmm

Witziger Weise habe ich noch folgendes Phänomen:

[ul]
[li]Ipad Safari: funktioniert die aktualisierung alle 10 sec.[/li][li]ips view: funktioniert die aktualisierung alle 10 sec. (staucht aber das Bild mit jeder Aktualisierung mehr zusammen)[/li][li]Firefox PC: Keine Aktualisierung des Bildes[/li][li]Chrome PC: Nicht mal ein Bild (Aber es versucht sich zu aktualisieren)[/li][/ul]

Abend!

Hast du mal versucht deine Kamera als Medien-Objekt „Stream MJPEG“ im IPS einzubinden und dann auch darüber in deine WebFronts und IPSView? So hab ich meine Kameras im IPSView eingebaut.

Alternativ gäbe es im IPS noch den ImageGrabber (wenn du nur alle X Sekunden einen Screenshot willst).

Oder die richtige coole Variante „IPSCam“ aus der „IPSLibrary“. Oder du machst es ganz anders und baust dir eine eigene HTML/PHP Seite, wo deine URL und so weiter eingebunden ist und diese rufst du dann in den WebFronts als „Externe Seite“ auf. Diese Seite müsste dann im IPS-Ordner unter „/webfront/user“ liegen.

Grüße,
Chris

Das Problem ist nur, meine Cam kann nur über rtsp einen Stream rausgeben (MJPEG und H.264) und IPS ob nun mit ips view oder ipsCam (was ich auch schon kenne), kann mit keinem rtsp Stream umgehen :frowning: Total doof nur http mit ips möglich.

ImageGrabber erzeugt nur eine leere 1kb kleine jpg Datei. Aber keinerlei Fehlermeldung. Funktioniert auch nicht.

http://192.168.2.73//Streaming/channels/2/picture

Der Link geht im Browser aber ohne weiteres.
Ohne athentifizierung meckert der Grabber auch korrekterweise. Aber mit Autentifizierung funktioniert der leider nicht.
Ich hab aber auch immer ein Glück ^^

Also laut Google kann deine MJPEG?! Hatte noch nie eine Trendnet, deswegen keine Ahnung, ob es stimmt was sie behaupten :smiley:

Viel Erfolg!
-Chris-

Puhh die Kamera hat aber auch eine Menge „Links“ die man benutzen kann… habe jetzt endlich den MJPEG Stream über http bekommen, den ich nun über eine HTML Box anzeigen lasse. Funktioniert perfekt !!! Danke für die ganzen Tipps.

http://BENUTZER:PASSWORD@192.168.2.73/Streaming/channels/1/httpPreview
Kamera: TV-IP311PI

Blöd: Und es ist nur 1 Stream zur Zeit möglich wenn ich das richtig sehe. Wenn ich auf dem Ipad den stream angezeigt bekommen, geht er auf dem PC mit dem selben Link im Webfront aus… ^^ auch wenn ich für jeden Client einen User anlege in der Cam und im Stream den jeweiligen User angebe, kann ich nur 1 Stream zur Zeit schauen. Ist das normal ?

Es wird langsam :smiley:

Mit nur 1 Stream pro User kann ich dir nicht sagen, aber das kannst du ja einfach testen. Bei meinen FOSCAM ist das nicht so, da kann ich im WebFront einen Stream offen haben und im IPSView gleichzeitig auch.

Viele Wege führen nach Rom und du wirst sicher noch eine gute Lösung hinbekommen :slight_smile:

Grüße,
Chris