IPSCam

Hallo Andreas

gerne möchte ich um die Aufnahme resp. um Unterstützung der folgenden Kameras bitten:

  • Cisco WVC2300 (nicht schwenkbar)
  • FOSCAM FI8904W (nicht schwenkbar)
  • FOSCAM FI8918E (schwenkbar)

Beiliegend eine Textdatei mit den notwendigen URL-Parametern.

Mit bestem Dank und herzlichem Gruss
Patrick :slight_smile:

Neue_Kameras.txt (2.7 KB)

Ich würde dann auch gerne noch mal auf diesen Wunsch hinweisen :wink:

Gruß
Jens

@Patrick

Hab mal 2 zusätzliche Komponenten integriert:

[ul]
[li]IPSComponentCam_Foscam89x
[/li][li]IPSComponentCam_Cisco
[/li][/ul]

Problem ist derzeit noch das Stoppen bei den schwenkbaren Kameras, das ist derzeit noch nicht implementiert!
Muss mir das nochmals durch den Kopf gehen lassen, wie man das am besten lösen könnte.

@Tetrapack

Ist mir Momentan zu viel Aufwand, kannst es Dir ja selber mit 2 kleinen Scripts realisieren.

Hallo Zusammen,
zunächst vielen Dank für die tolle Arbeit!

Nach einigen Startschwierigkeiten als IPS-Neuling, habe ich vermutlich bei Vivotek einen kleinen Fehler im Skript gefunden.

Die URLs der MJPG-Streams von meiner Vivotek IP8332 sehen wie folgt aus:

MJPEG:
http://<ip>/video.mjpg
http://<ip>/video2.mjpg
http://<ip>/video3.mjpg
http://<ip>/video4.mjpg

Von IPSCam werden die Streams jedoch wie folgt aufgerufen:

MJPEG:
http://<ip>/video.mjpg?streamid=1
http://<ip>/video.mjpg?streamid=2
http://<ip>/video.mjpg?streamid=3

Dies hat zur Folge, dass der Parameter „streamid“ ignoriert und immer der erste Stream (video.mjpg) für die Anzeige verwendet wird.

Da die Streams von Vivotek defaultmäßig von der hohen Auflösung zur kleineren Auflösung vorkonfiguriert sind, habe ich die Get_URLLiveStream() in IPSComponentCam_Vivotek (ab Zeile 98) wie folgt abgeändert:

		/**
		 * @public
		 *
		 * Liefert URL des Kamera Live Streams 
		 *
		 * @param integer $size Größe des Streams, mögliche Werte:
		 *                      IPSCOMPONENTCAM_SIZE_SMALL, IPSCOMPONENTCAM_SIZE_MIDDLE oder IPSCOMPONENTCAM_SIZE_LARGE
		 * @return string URL des Streams
		 */
		public function Get_URLLiveStream($size=IPSCOMPONENTCAM_SIZE_MIDDLE) {
			$url = 'http://'.$this->username.':'.$this->password.'@'.$this->ipAddress.'/video';
			switch ($size)
			{
				case  IPSCOMPONENTCAM_SIZE_SMALL:
					$url .= '3';
					break;
				case  IPSCOMPONENTCAM_SIZE_MIDDLE:
					$url .= '2';
					break;
				case  IPSCOMPONENTCAM_SIZE_LARGE:
					$url .= '';
					break;
				default:
					trigger_error('Unknown Size '.$size);
			}
			
			$url .= '.mjpg';
			
			return $url;
		}

Ich bin der Meinung, dass auch bei der Bildanzeige für Vivotek ebenfalls etwas angepasst werden muss.
Die URL zum Bild hat bei Vivotek folgende Form:

http://<ip>/cgi-bin/viewer/video.jpg
http://<ip>/cgi-bin/viewer/video.jpg?resolution=640x360

Meine Änderungen der Get_URLPicture() in IPSComponentCam_Vivotek sehen wie folgt aus:

		/**
		 * @public
		 *
		 * Liefert URL des Kamera Bildes 
		 *
		 * @param integer $size Größe des Bildes, mögliche Werte:
		 *                      IPSCOMPONENTCAM_SIZE_SMALL, IPSCOMPONENTCAM_SIZE_MIDDLE oder IPSCOMPONENTCAM_SIZE_LARGE 
		 * @return string URL des Bildes
		 */
		public function Get_URLPicture($size=IPSCOMPONENTCAM_SIZE_MIDDLE) {
			$url = 'http://'.$this->username.':'.$this->password.'@'.$this->ipAddress.'/cgi-bin/viewer/video.jpg?resolution=';

			switch ($size)
			{
				case  IPSCOMPONENTCAM_SIZE_SMALL:
					$url .= (int)(1280*(IPSCAM_HEIGHT_SMALL/720)).'x'.IPSCAM_HEIGHT_SMALL;
					break;
				case  IPSCOMPONENTCAM_SIZE_MIDDLE:
					$url .= (int)(1280*(IPSCAM_HEIGHT_MIDDLE/720)).'x'.IPSCAM_HEIGHT_MIDDLE;
					break;
				case  IPSCOMPONENTCAM_SIZE_LARGE:
					$url .= (int)(1280*(IPSCAM_HEIGHT_LARGE/720)).'x'.IPSCAM_HEIGHT_LARGE;
					break;
				default:
					trigger_error('Unknown Size '.$size);
			}

			return $url;
		}

Ist dies eventuell nur bei den neuen IP-Cams von Vivotek so?
Kann diese Änderung jemand bestätigen?

Hi,

hab eigentlich auch die 8332, komme aber mit Deinen Änderungen nicht wirklich zurecht (nur aber mal auf die Schnelle probiert).

Habe bei mir die verschiedenen Streams direkt auf der Kamera eingestellt.

Hallo,
rufe mal in deinem Browser diese Streams auf:

http://<ip>/video.mjpg
http://<ip>/video2.mjpg
http://<ip>/video3.mjpg

Und dann rufe mal die auf, die von IPSCam aufgerufen werden:

http://<ip>/video.mjpg?streamid=1
http://<ip>/video.mjpg?streamid=2
http://<ip>/video.mjpg?streamid=3

Du wirst merken, dass das immer Stream 1 (=video.mjpg) ist und nicht die 3 verschiedenen Streams.
Ändere einfach einmal zum Test die Bildqualität der verschiedenen Streams, dann erkennst du den Fehler sehr einfach.

Hallo,

ich bekomme irgendwie meine Cam nicht in die Library :o

IPSComponentCam_Digitus.class.php

<?
	/*
	 * This file is part of the IPSLibrary.
	 *
	 * The IPSLibrary is free software: you can redistribute it and/or modify
	 * it under the terms of the GNU General Public License as published
	 * by the Free Software Foundation, either version 3 of the License, or
	 * (at your option) any later version.
	 *
	 * The IPSLibrary is distributed in the hope that it will be useful,
	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	 * GNU General Public License for more details.
	 *
	 * You should have received a copy of the GNU General Public License
	 * along with the IPSLibrary. If not, see http://www.gnu.org/licenses/gpl.txt.
	 */

	 /**@addtogroup ipscomponent
	 * @{
	 *
	 * @file          IPSComponentCam_Edimax.class.php
	 * @author        Andreas Brauneis
	 *
	 */

	/**
    * @class IPSComponentCam_Edimax
    *
    * Definiert ein IPSComponentCam Object, das die Funktionen einer Cam Componente für eine
    * Edimax Kamera implementiert
    *
    * @author Andreas Brauneis
    * @version
    *   Version 2.50.1, 26.08.2012<br/>
    */

	IPSUtils_Include ('IPSComponentCam.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentCam');

	class IPSComponentCam_Edimax extends IPSComponentCam {

		private $ipAddress;
		private $username;
		private $password;

		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentCam_Edimax Objektes
		 *
		 * @param string $ipAddress IP Adresse der Kamera
		 * @param string $username Username für Kamera Zugriff
		 * @param string $password Passwort für Kamera Zugriff
		 */
		public function __construct($ipAddress, $username, $password) {
			$this->ipAddress  = $ipAddress;
			$this->username   = $username;
			$this->password   = $password;
		}

			/**
		 * @public
		 *
		 * Funktion liefert String IPSComponent Constructor String.
		 * String kann dazu benützt werden, das Object mit der IPSComponent::CreateObjectByParams
		 * wieder neu zu erzeugen.
		 *
		 * @return string Parameter String des IPSComponent Object
		 */
		public function GetComponentParams() {
			return get_class($this).','.$this->instanceId;
		}

		/**
		 * @public
		 *
		 * Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event
		 * an das entsprechende Module zu leiten.
		 *
		 * @param integer $variable ID der auslösenden Variable
		 * @param string $value Wert der Variable
		 * @param IPSModuleCam $module Module Object an das das aufgetretene Event weitergeleitet werden soll
		 */
		public function HandleEvent($variable, $value, IPSModuleCam $module) {
			$name = IPS_GetName($variable);
			throw new IPSComponentException('Event Handling NOT supported for Variable '.$variable.'('.$name.')');
		}

		/**
		 * @public
		 *
		 * Liefert URL des Kamera Live Streams
		 *
		 * @param integer $size Größe des Streams, mögliche Werte:
		 *                      IPSCOMPONENTCAM_SIZE_SMALL, IPSCOMPONENTCAM_SIZE_MIDDLE oder IPSCOMPONENTCAM_SIZE_LARGE
		 * @return string URL des Streams
		 */
		public function Get_URLLiveStream($size=IPSCOMPONENTCAM_SIZE_MIDDLE) {
			$url = 'rtsp://'.$this->username.':'.$this->password.'@'.$this->ipAddress.':554/';
			switch ($size) {
				case  IPSCOMPONENTCAM_SIZE_SMALL:
					$url .= 'ch0_1.h264';
					break;
				case  IPSCOMPONENTCAM_SIZE_MIDDLE:
					$url .= 'ch0_1.h264';
					break;
				case  IPSCOMPONENTCAM_SIZE_LARGE:
					$url .= 'ch0_0.h264';
					break;
				default:
					trigger_error('Unknown Size '.$size);
			}
			return $url;
		}

		/**
		 * @public
		 *
		 * Liefert URL des Kamera Bildes
		 *
		 * @param integer $size Größe des Bildes, mögliche Werte:
		 *                      IPSCOMPONENTCAM_SIZE_SMALL, IPSCOMPONENTCAM_SIZE_MIDDLE oder IPSCOMPONENTCAM_SIZE_LARGE
		 * @return string URL des Bildes
		 */
		public function Get_URLPicture($size=IPSCOMPONENTCAM_SIZE_MIDDLE) {
			$url = 'http://'.$this->username.':'.$this->password.'@'.$this->ipAddress.'/cgi-bin/net_jpeg.cgi';
			switch ($size) {
				case  IPSCOMPONENTCAM_SIZE_SMALL:
					$url .= '?ch=0';
					break;
				case  IPSCOMPONENTCAM_SIZE_MIDDLE:
					$url .= '?ch=0';
					break;
				case  IPSCOMPONENTCAM_SIZE_LARGE:
					$url .= '?ch=1';
					break;
				default:
					trigger_error('Unknown Size '.$size);
			}
			return $url;
		}

		/**
		 * @public
		 *
		 * Bewegen der Kamera
		 *
		 * @param integer $urlType Type der URL die geliefert werden soll.
		 *                         mögliche Werte: IPSCOMPONENTCAM_URL_MOVEHOME
		                                           IPSCOMPONENTCAM_URL_MOVELEFT
		                                           IPSCOMPONENTCAM_URL_MOVERIGHT
		                                           IPSCOMPONENTCAM_URL_MOVEUP
		                                           IPSCOMPONENTCAM_URL_MOVEDOWN
		                                           IPSCOMPONENTCAM_URL_PREDEFPOS1
		                                           IPSCOMPONENTCAM_URL_PREDEFPOS2
		                                           IPSCOMPONENTCAM_URL_PREDEFPOS3
		                                           IPSCOMPONENTCAM_URL_PREDEFPOS4
		                                           IPSCOMPONENTCAM_URL_PREDEFPOS5
		 */
		public function Get_URL($urlType) {
			$url = 'http://'.$this->username.':'.$this->password.'@'.$this->ipAddress.'/cgi-bin/cmd.cgi?';
			switch ($urlType) {
					case IPSCOMPONENTCAM_URL_MOVELEFT:
						$url = $url.'opType=set&cmd=ptz&ptz_cmd=3&protocol=1&band=2400&speed=16&addr=1&data=11';
						break;
					case IPSCOMPONENTCAM_URL_MOVERIGHT:
						$url = $url.'opType=set&cmd=ptz&ptz_cmd=4&protocol=1&band=2400&speed=16&addr=1&data=11';
						break;
					case IPSCOMPONENTCAM_URL_MOVEUP:
						$url = $url.'opType=set&cmd=ptz&ptz_cmd=1&protocol=1&band=2400&speed=16&addr=1&data=11';
						break;
					case IPSCOMPONENTCAM_URL_MOVEDOWN:
						$url = $url.'opType=set&cmd=ptz&ptz_cmd=2&protocol=1&band=2400&speed=16&addr=1&data=11';
						break;
					case IPSCOMPONENTCAM_URL_MOVEHOME:
						$url = $url.'opType=set&cmd=ptz&ptz_cmd=5&protocol=1&band=2400&speed=16&addr=1&data=11';
						break;
					case IPSCOMPONENTCAM_URL_PREDEFPOS1:
						$url = $url.'';
						break;
					case IPSCOMPONENTCAM_URL_PREDEFPOS2:
						$url = $url.'';
						break;
					case IPSCOMPONENTCAM_URL_PREDEFPOS3:
						$url = $url.'';
						break;
					case IPSCOMPONENTCAM_URL_PREDEFPOS4:
						$url = $url.'';
						break;
					case IPSCOMPONENTCAM_URL_PREDEFPOS5:
						$url = $url.'';
						break;
				default:
					trigger_error('Diese Funktion ist für eine Digitus Kamera noch NICHT implementiert !!!');
			}
			return $url;
		}

		/**
		 * @public
		 *
		 * Liefert Breite des Kamera Bildes
		 *
		 * @param integer $size Größe des Bildes, mögliche Werte:
		 *                      IPSCOMPONENTCAM_SIZE_SMALL, IPSCOMPONENTCAM_SIZE_MIDDLE oder IPSCOMPONENTCAM_SIZE_LARGE
		 * @return integer Breite des Bildes in Pixel
		 */
		public function Get_Width($size=IPSCOMPONENTCAM_SIZE_MIDDLE) {
			switch ($size) {
				case  IPSCOMPONENTCAM_SIZE_SMALL:
					$return = 320;
					break;
				case  IPSCOMPONENTCAM_SIZE_MIDDLE:
					$return = 640;
					break;
				case  IPSCOMPONENTCAM_SIZE_LARGE:
					$return = 1024;
					break;
				default:
					trigger_error('Unknown Size '.$size);
			}
			return $return;
		}

		/**
		 * @public
		 *
		 * Liefert Höhe des Kamera Bildes
		 *
		 * @param integer $size Größe des Bildes, mögliche Werte:
		 *                      IPSCOMPONENTCAM_SIZE_SMALL, IPSCOMPONENTCAM_SIZE_MIDDLE oder IPSCOMPONENTCAM_SIZE_LARGE
		 * @return integer Höhe des Bildes in Pixel
		 */
		public function Get_Height($size=IPSCOMPONENTCAM_SIZE_MIDDLE) {
			switch ($size) {
				case  IPSCOMPONENTCAM_SIZE_SMALL:
					$return = 240;
					break;
				case  IPSCOMPONENTCAM_SIZE_MIDDLE:
					$return = 480;
					break;
				case  IPSCOMPONENTCAM_SIZE_LARGE:
					$return = 768;
					break;
				default:
					trigger_error('Unknown Size '.$size);
			}
			return $return;
		}
	}

	/** @}*/
?>

Habe eine Digitus dn-16036.

Bilder:
http://IP:PORT/cgi-bin/net_jpeg.cgi?ch=0 (Minor stream: default VGA)
http:// IP:PORT/cgi-bin/net_jpeg.cgi?ch=1 (Main stream: default 720P)
Port=80
Video streaming:
rtsp://IP:PORT/ch0_1.h264 (Minor stream: default VGA)
rtsp://IP:PORT/ch0_0.h264 (Main stream: default 720P)
Port=554

Die Steuerungen:
left
http://IP/cgi-bin/cmd.cgi?opType=set&cmd=ptz&ptz_cmd=3&protocol=1&band=2400&speed=16&addr=1&data=11
right
http://IP/cgi-bin/cmd.cgi?opType=set&cmd=ptz&ptz_cmd=4&protocol=1&band=2400&speed=16&addr=1&data=11
up
http://IP/cgi-bin/cmd.cgi?opType=set&cmd=ptz&ptz_cmd=1&protocol=1&band=2400&speed=16&addr=1&data=11
down
http://IP/cgi-bin/cmd.cgi?opType=set&cmd=ptz&ptz_cmd=2&protocol=1&band=2400&speed=16&addr=1&data=11
Stop(home)
http://IP/cgi-bin/cmd.cgi?opType=set&cmd=ptz&ptz_cmd=5&protocol=1&band=2400&speed=16&addr=1&data=11

Es muss die Bewegung immer gestopt werden ( hier mit Home ).

Die Auflösung VGA oder 720p

@Willi

Du musst auch noch die Klasse umbenennen, dann sollte es funktionieren.


    class IPSComponentCam_Digitus extends IPSComponentCam {

Wennn es dann funktioniert, bitte den Code nochmals posten, dann pflege ich in die Library ein …

@Brovning

ok, ich denke Punkt für Dich, bei mir lieferte stream1 - 4 zwar auch einen Stream mit entsprechender Auflösung, Deine Version dürfte aber die aktuellere sein.

Bei den Images musste ich ein kleines „x“ verwenden, damit die richtige Auflösung gewählt wird.

Freut mich, dass ich auch als Neuling bereits helfen konnte. :rolleyes:

Bekomme ab und zu folgende Fehler-Meldung:

Warning: Konnte Medien nicht setzen: Cannot open file „C:\Program Files (x86)\IP-Symconv2\Cams\0\Picture\Common.jpg“. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird<br> Error in Script C:\Program Files (x86)\IP-Symconv2\scripts\IPSLibrary\app\modules\IPSCam\IPSCam_Manager.class.php on Line 469<br> …

Gibt es den Fehler auch bei anderen?

Gruss, H-C

Hallo,

habe folgenden Effekt bei IPSCam.
Schalte ich die Kamera aus, bei mir mit Plugwise und es läuft gerade ein Script
z.B.IPSCam_ActionScript wird dieser bei „PHP Informationen“ rot markiert und
bleibt als Leiche dort verankert.
Somit geht das Beenden des Servers nicht mehr ohne killen.
Würde vor dem abschalten der Cam ein deaktivieren der Ereignisse Abhilfe schaffen?

Hallo,
bei der Digitus Cam ist der Video Stream nicht über http abrufbar,
sondern mithilfe des VLC abrufbar.:o
Wird wahrscheinlich dadurch nicht so einfach in IPSCam einzubinden sein.
Die Kamera Steuerung habe ich noch nicht im Webfront gefunden.
Wo sind sie zu finden?

Zur Steuerung im WebFront, einfach auf die Seiten im Image drücken.
Bei VLC kann ich Dir auch nicht helfen.

Die Sache mit dem Fehler hab ich noch nicht ganz verstanden - wie’s aussieht, können wir da aber eh mal persönlich drüber plaudern :slight_smile:

Hallo

Kann man in IPScam den Pfad für die Historybilder ändern ?? Wenn ja wo.

Danke

Oliver

Hallo,

glaube das geht in Program/IPSLibrary/app/modules/IPSCam bei Script IPSCam_Manager.
Da muss man sich aber gut mit PHP auskennen, sonst gibt es diverse Ungereimtheiten. :wink:

Oder Brownson baut was in die Config ein.

Ja, freue mich schon :slight_smile:

Hallo,

mir ist aufgefallen, dass, sobald IPSCam installiert ist und ich per Webbrowser das IPS-WebFrontend offen habe, der Netzwerktraffic ansteigt (und zwar auf konstant ca. 500 kbps).
Das ganze ist zwar kein wirkliches Problem, aber doch ein bisl suboptimal (Akkulaufzeit vom Notebook leidet, unnötiger Datentraffic wird generiert, wenn man nicht im lokalen WLAN ist usw.)

Der tcpdump zeigt, dass der Webbrowser (egal ob chrome oder Firefox) laufend mit der IP Cam (in meinem Fall Mobotix T24 - 192.168.1.220) kommuniziert, auch wenn man im IPSCam Teil nicht auf Live View steht oder generell wo anders.

00:07:04.396309 IP 192.168.1.101.57529 > 192.168.1.220.80: Flags [.], ack 354581, win 8101, options [nop,nop,TS val 415679364 ecr 41890599], length 0
00:07:04.396974 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 354581:356029, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679363], length 1448
00:07:04.397043 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 356029:357477, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679363], length 1448
00:07:04.397574 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 357477:358925, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679363], length 1448
00:07:04.397652 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 358925:360373, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679363], length 1448
00:07:04.398343 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 360373:361821, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679364], length 1448
00:07:04.398386 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 361821:363269, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679364], length 1448
00:07:04.398457 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [.], seq 363269:364717, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679364], length 1448
00:07:04.398505 IP 192.168.1.220.80 > 192.168.1.101.57529: Flags [P.], seq 364717:365356, ack 1, win 339, options [nop,nop,TS val 41890599 ecr 415679364], length 639
00:07:04.398557 IP 192.168.1.101.57529 > 192.168.1.220.80: Flags [.], ack 365356, win 7971, options [nop,nop,TS val 415679366 ecr 41890599], length 0

Ist das bei euch auch so?

Hallo Brownson,

bei mir kommen immer wieder Fehlermeldungen, dass eine Datei nicht gefunden wurde:

Ursache ist, dass beim nächtlichen Löschen der alten Kamerabilder auch das Bild gelöscht wird, das als „CamHist“ noch eingebunden ist.

Ich habe daher bei mir die Funktion PurgeFilesByDirectory dahingehend erweitert, dass ein Bild nur dann gelöscht wird, wenn es nicht als Mediendatei eingebunden ist:

alt:

if ($fileDate < $refDate) {
	IPSLogger_Dbg(__file__, 'Delete Camera File: '.$filenameFull);
	unlink($filenameFull);
}

neu:

if (($fileDate < $refDate) && (@IPS_GetMediaIDByFile(str_replace(IPS_GetKernelDir()."\\","",$filenameFull))== 0) ) {
	IPSLogger_Dbg(__file__, 'Delete Camera File: '.$filenameFull);
	unlink($filenameFull);
}

Macht es Sinn, das zu übernehmen? Würde mich freuen.

Viele Grüße

Burkhard