[Gelöst]Problem mit IP Cam in IPCAM

Begonnen von UweH, 16 Januar 2016, 15:09:58

Vorheriges Thema - Nächstes Thema

UweH

Moin,

ich habe eine IP Kamera, die mit dem Befehl http://<IP>/web/cgi-bin/hi3510/param.cgi?cmd=snap&-chn=2&-continue=1&-getpic ohne Passworteingabe ein Standbild (jpg) liefert.

Leider funktioniert das nicht im Modul IPCAM.

Internals sehen so aus:
Internals:
   AUTHORITY  <meine IP>
   DEF        <meine IP>
   NAME       IPCam
   NR         597
   SEQ        0
   STATE      Defined
   TYPE       IPCAM
   Readings:
     2016-01-15 20:15:27   last            IPCam_snapshot.jpg
     2016-01-15 20:15:27   snapshot1       IPCam_snapshot_1.jpg
     2016-01-15 20:15:27   snapshots       0
Attributes:
   loglevel   6
   path       web/cgi-bin/hi3510/param.cgi?cmd=snap&-chn=1&-continue=1&-getpic
   room       Cam
   storage    /opt/fhem/snapshots

(Die Readings stammen testweise von einer anderen Kamera, die standardmäßig mit snapshot.cgi usw. angesprochen werden kann.)
Trotz loglevel 6 bzw auch mal verbose 5 steht nichts im Log außer:
...1: IPCAM IPCam Wrong or not supported image format: unknown

Tja...hat jemand eine Idee, was ich tun muss, damit auch diese Kamera mit IPCAM funktioniert?

Danke und Gruß
Uwe

oti

#1
Hallo Uwe,

das "Problem" bei der Kamera ist wahrscheinlich, dass bei dem Aufruf über die von dir genannte URL nicht auf die JPG-Datei direkt, sondern auf eine Webseite zugegriffen wird. Du kannst es prüfen, indem Du nach Aufruf der URL dir den Quellcode der Webseite anschaust. Dort wirst Du dann wohl den temporären Pfad zu der JPG-Datei sehen.
Ungefähr so:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
<img src="../../../tmpfs/snap_tmpfs/20160118/IMG001/IMG_chn2_TIMER_MNG_20160118212343_028.jpg" />
</body>
</html>


Du könntest vielleicht die Kamera als html-Code folgendermaßen einbinden:

define CamPic weblink htmlCode <img id="Cam" src="http://<IP>:<Port>/web/cgi-bin/hi3510/param.cgi?cmd=snap&-chn=2&-continue=0&-getpic"></img>

'id="Cam"' ist für css, so kannst Du die Größe, u.s.w. einstellen. 
oder als Stream

define CamStream weblink htmlCode <img id="Cam" src="http://<IP>:<Port>/web/cgi-bin/hi3510/snap.cgi?&-getstream-chn=2"></img>



Gruß
OTi

UweH

Ok, Danke, ist genau so wie von Dir beschrieben. Das Einbinden per weblink hatte ich schon mal getestet, funktioniert auch nicht. Somit taugt das Teil offenbar also nicht für FHEM. Dann weiß ich nun zumindest das...

Gruß
Uwe

oti

Hallo,

was hast Du denn genau vor?
Das Einbinden per Weblink funktioniert bei mir.
Inzwischen kann ich auch z. B. einzelne Bilder versenden, habe ich über ein Bash-Skript und wget gelöst.

Gruß
OTi

UweH

Zitat von: oti am 19 Januar 2016, 17:28:58
was hast Du denn genau vor?
Ich wollte meine "alte" IP-Cam an der Haustür durch eine kleinere Dom-Kamera ersetzen. Ich lasse mir das Kamerabild beim Klingeln an der Haustür per Telegram auf's Handy schicken, funktioniert auch alles, nur meine alte Cam hat eine besch... Infrarotsicht bei Nacht. Daher muss eine neue ran.
Die bisherige arbeitet problemlos mit IPCAM zusammen, reagiert auf snapshot.cgi usw. Leichtsinnigerweise dachte ich, dass das ja alle IP-Kameras können müssten, hab mich aber böse getäuscht. Da ich für den Spielkram nicht so viel Geld ausgeben wollte, hab ich nun ein paar Kameras bis 120€ getestet und nur eine kann wenigstens ein Standbild erzeugen (IPCC-D09-W) und kommt ohne ActiveX und Quicktime aus.
Vielleicht kennt jemand eine andere Dom-Kamera in dem Preissegment, die das auch kann und dann auch noch mit IPCAM zusammenarbeitet...oder eine Lösung für meine Cam?

Danke und Gruß
Uwe

oti

#5
Bei mir läuft FHEM auf einem Raspi. Ich lasse mir beim Klingeln via Pushbullet einen Link schicken, der das Bild der Kamera beinhaltet. Das habe ich folgendermaßen gelöst:
Über ein Skript hole ich mir den temporären Pfad und baue mir so den Pfad zu dem Bild zusammen. Das Bild kopiere ich dann per wget in ein Verzeichnis von fhem. Darauf kann ich dann sogar einfach per http zugreifen, oder den Link dahin eben verschicken.

Das Skript klingel.sh (abgelegt im fhem-Verzeichnis):

#!/bin/sh
rm -f /opt/fhem/www/images/tuer.jpg
PIC=$(wget -O - 'http://192.168.XX.XX/bin/cgi-bin/hi3510/param.cgi?cmd=snap&-chn=2' | cut -c12-86)
wget -O /opt/fhem/www/images/tuer.jpg 'http://192.168.XX.XX'$PIC

Was macht das Skript:
- Bild löschen
- Pfad aus der Webseite holen und zuschneiden
- Bild tuer.jpg in das Verzeichnis /opt/fhem/www/images einfügen

Das Skript starte ich über folgendes define und verschicke dabei auch die Pushbullet-Meldung:

define noti_Klingel_Tuer notify Klingel_Tuer:on {\
    system ('/opt/fhem/klingel.sh&');;\
    fhem ("set Pushmsg link http://DYNDNS.ORG/fhem/images/tuer.jpg | Klingel Haustür");;\
  }\
}


Hilft das weiter?

Gruß
OTi

UweH

Hervorragend!
Das hilft nicht nur weiter, das war die Lösung  ;D Musste ich für meine Belange (versenden mit TelegramBot) etwas abwandeln, aber wenn man eine Richtung hat, dann geht's.

Vielen Dank

Gruß
Uwe

UweH

Nachtrag: Da das notify zu schnell war (bevor das neue Bild gespeichert werden konnte, hat das notify schon das alte Bild versendet) und ich eh fast alle Notifys auf DOIF umgestellt habe, hier nun das Ergebnis als DOIF mit Verzögerung. So funktioniert es nun problemlos.

Internals:
   DEF        ([dmy_Klingel_Tuer] eq "on") ({system ("/opt/fhem/FHEM/klingel.sh&")}) (set myTeleBot sendImage /opt/fhem/snapshots/tuer.jpg) DOELSE
   NAME       DI_Klingel_Tuer
   NR         631
   NTFY_ORDER 50-DI_Klingel_Tuer
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-01-24 09:02:24   Device          dmy_Klingel_Tuer
     2016-01-24 09:02:24   cmd_event       dmy_Klingel_Tuer
     2016-01-24 09:02:24   cmd_nr          2
     2016-01-24 09:02:24   e_dmy_Klingel_Tuer_STATE off
     2016-01-24 09:02:24   state           cmd_2
     2016-01-24 15:08:07   wait_timer      no timer
   Condition:
     0          InternalDoIf('dmy_Klingel_Tuer','STATE','') eq "on"
   Devices:
     0           dmy_Klingel_Tuer
     all         dmy_Klingel_Tuer
   Do:
     0:
       0          {system ("/opt/fhem/FHEM/klingel.sh&")}
       1          set myTeleBot sendImage /opt/fhem/snapshots/tuer.jpg
     1:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           dmy_Klingel_Tuer:STATE
     all         dmy_Klingel_Tuer:STATE
   Itimer:
   State:
Attributes:
   do         always
   room       Mail
   wait       0,1

Alcamar

Für meine Kamera habe ich folgendes Skript erstellt:
#!/bin/sh
rm -f /opt/fhem/www/images/mypic.jpg
PIC=$(wget -O - 'http://myuser:mypasswd@192.168.xxx.xx/jpg/image.jpg' | cut -c12-86)
wget -O /opt/fhem/www/images/mypic.jpg 'http://192.168.xxx.xx0'$PIC


Bei Eingabe von 'http://myuser:mypasswd@192.168.xxx.xx/jpg/image.jpg' im Browser erscheint auch das gewünschte Bild.

Wenn ich das Skript starte, scheint es an der Authentifizierung zu scheitern:
HTTP request sent, awaiting response... 401 Unauthorized


Was mache ich falsch?

Es kommen einige Zeilen mit:
wget: invalid option -- '▒'
wget: invalid option -- '}'
...


Wenn das funktioniert, ist das eine sehr einfache, aber auch ebenso hervorragende Lösung. Das würde meine aktuellen Probleme mit dem IPCAM-Modul optimal lösen.

Alcamar

ich habe es ohne Skript gelöst. Ein Skript für zwei Zeilen ist vielleicht überdimensioniert.
system ("wget -O " .$Pfad. " http://user:password\@192.168.xxx.xx:80/jpg/image.jpg > /dev/null 2>&1");
und
my $Pfad = "/opt/fhem/www/images/mysnapshot.jpg";
Das ganze befindet sich in einer sub, die in 99_myUtils.pm abgelegt ist.

In die IPCAM-Einbindung habe ich sehr viel mehr Zeit gesteckt und habe die Probleme nicht in den Griff bekommen. Diese einfache Lösung ist sehr stabil.
Das ursprüngliche Ziel war es ein Bild von einer IP-Kamera auf das Handy zu senden. Das geht mit IPCAM auch. Wenn das Netzwerk mal nicht schnell genug ist, wirft IPCAM aber eine Fehlermeldung. Ab da fingen meine Probleme an:
https://forum.fhem.de/index.php/topic,73545.0.html

juppzupp

zwar ein älterer thread.....jedoch.....habe ich nun auch eine kamera die ein bild via

http:// <servername>/web/cgi-bin/hi3510/param.cgi?cmd=snap&-getpic&-chn=2

liefern soll, welches mit IPCAM nicht funktioniert, da es html mit eingebettetem jpg ist.

Da Onvif so nicht klappen würde, habe ich den sniffer angeschmissen, und geschaut wie über Onvif die bilder geholt werden

http:// <servername>/web/cgi-bin/hi3510/snap.cgi?&-getstream&-sn

so klappts auch mit IPCAM.


hth

MiMoAC

#11
Hallo Zusammen.

Ich habe mir eine IP-Kamera von CTronics gekauft.

http://www.ctronicssecuritycameras.com/shop/wifi-720p-ip-camera/150-wide-viewip-cameractronics-wifi-wireless-security-camera-surveillance-dome-camera-vandalproofaudiohd-720pnight-visionmotion-detectemail-alertpcphonetabletcms-remote16g-sd-includ/ 

(Bei Amazon für 80€ https://www.amazon.de/gp/product/B0744JNLLX/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1)

Bisher funktioniert alles ganz gut mit der App des Herstellers und mit iSpy.

Ich würde gerne die IP-Kamera in FHEM einbinden, sodass ich wie bei euch ein Bild zugeschickt bekomme.

Das Kamerabild in iSpy erhalte ich über folgenden Link:

IPKamera mit Wizard

Ich habe festgestellt, dass ich ein Bild bekomme, wenn ich statt Ctronics -- HiSilicon RTSP(TCP) DVR als Hersteller auswähle.

rtsp://admin.admin@192.168.xxx.xxx:554/11   (Dieser Link funktioniert auch im VLC-Player)

(Zur Sicherheit verwende ich HIER die Default Passwörter und die gekürzte IP.)

Kann mir jemand weiterhelfen?

Meine Config sieht derzeit so aus:

define IPKAMERA IPCAM 192.168.xxx.xxx:554/11
attr IPKAMERA delay 0
attr IPKAMERA group Kamera
attr IPKAMERA icon it_camera
attr IPKAMERA path rtsp://admin:admin@192.168.178.105:554/11
attr IPKAMERA room IP Kamera
attr IPKAMERA snapshots 1
attr IPKAMERA storage /opt/fhem/www/snapshots/cam1