Hallo zusammen,
habe eine Wansview Ip-Webcam mittels IPCAM in FHEM eingebunden.
Habe folgende Cam von Amazon: http://www.amazon.de/Wansview-steuerbare-eingebautem-Lautsprecher-Nachtsicht/dp/B005MJ8NUI/ref=sr_1_3?ie=UTF8&qid=1408470536&tag=v0-21&sr=8-3&keywords=ip+kamera
=> NCL616W
allerdings kann ich kein Bild abrufen - folgender Fehler erscheint im Log:
IPCAM KCam Wrong or not supported image format: error while reading source image:
Use of uninitialized value in read at ./FHEM/49_IPCAM.pm line 452.
hinterlegt ist folgendes
define KCam IPCAM 192.168.178.40
attr KCam basicAuth userxyz:passwordxyz
attr KCam cmd01 motion_armed=0
attr KCam cmd02 motion_armed=1
attr KCam cmdPanLeft command=4
attr KCam cmdPanRight command=6
attr KCam cmdPos01 command=31
attr KCam cmdPos02 command=33
attr KCam cmdPos03 command=35
attr KCam cmdPosHome command=24
attr KCam cmdTiltDown command=2
attr KCam cmdTiltUp command=0
attr KCam loglevel 6
attr KCam path snapshot.cgi
attr KCam pathCmd set_misc.cgi
attr KCam pathPanTilt decoder_control.cgi?onestep=0
attr KCam room Allgemein
attr KCam storage ./www/snapshots
rufe ich http://192.168.178.40/snapshot.cgi?user=xxx&pwd=xxx direkt im Browser auf kommt ein jpeg zurück.
kann mir da jemand weiterhelfen?!?
Wird bei "Erfolg" das Bild dann in Fhem angezeigt oder muss das noch manuell eingebunden werden?
mfg
Markus
Hi,
meine Wansview läuft super mit dieser Konfiguration:
define IPCam IPCAM xxxxx
attr IPCam basicauth xxx:xxx
attr IPCam cmd01 motion_armed=1&motion_sensitivity=3&motion_compensation=1&input_armed=0&iolinkage=0&mail=1&upload_interval=3
attr IPCam cmd02 motion_armed=0
attr IPCam cmdPanLeft command=4&onestep=1
attr IPCam cmdPanRight command=6&onestep=1
attr IPCam cmdPos01 command=28
attr IPCam cmdPos02 command=29
attr IPCam cmdPos03 command=26
attr IPCam cmdPos04 command=27
attr IPCam cmdPos10 command=33
attr IPCam cmdPos11 command=35
attr IPCam cmdPosHome command=31
attr IPCam cmdStep onstep
attr IPCam cmdTiltDown command=0&onestep=1
attr IPCam cmdTiltUp command=2&onestep=1
attr IPCam delay 20
attr IPCam event-on-update-reading snapshots
attr IPCam path snapshot.cgi
attr IPCam pathCmd set_alarm.cgi
attr IPCam pathPanTilt decoder_control.cgi?
attr IPCam room Alarmanlage
attr IPCam snapshots 10
attr IPCam storage /opt/fhem/FHEM
Grüße
stoxx
Für das Anzeigen des Bildes ist IPCAM nicht vorgesehen. Das kannst Du aber recht einfach mit einem Weblink (http://fhem.de/commandref.html#weblink) machen.
Die Bilder werden beim mir auf dem Raspberry im Pfad /opt/fhem/FHEM gespeichert; die kann man sich dann ansehen, indem man z.B. einen Webserver einrichtet:
define Webserver HTTPSRV pics /opt/fhem/FHEM Webcam-Bilder
Aufruf der Bilder, z.B.
IP-Adresse/fhem/pics/IPCam_snapshot.jpg
Grüße
stoxx
hab jetzt auf basicAuth umgestellt, aber immer noch die gleiche Fehlermeldung im Logfile :-/
Zitat2014.08.17 12:14:50 1: IPCAM KCam Wrong or not supported image format: error while reading source image: GLOB(0x2b73108)
Use of uninitialized value in read at ./FHEM/49_IPCAM.pm line 452.
Hallo,
lt. Maintainer.txt:
ZitatFHEM/49_IPCAM.pm mfr69bs http://forum.fhem.de Sonstiges
Ich verschieb mal.
Grüße
Über welchen Befehl machst Du denn die Aufnahme? Auf welchem System läuft Dein FHEM? Und welche Wansview Cam hast Du denn? Ich habe die NCB541.
Da fällt mir nochwas auf - ich brauchte hinter der IP-Adresse einen Port... also z.B. bei Port 6060
define KCam IPCAM 192.168.178.40:6060
Ich musste bei der Erstkonfiguration der Cam einen Port definieren.
Vielleicht liegts daran?
der obige Fehler erscheint im Log, wenn ich get KCAM image
aufrufe.
Port sollte nicht notwendig sein, da alles über Port 80 (also Standard-Server-Port) erreichbar ist und wie geschrieben, wird bei direktem Aufruf der http://192.168.178.40/snapshot.cgi?user=xxx&pwd=xxx auch ein JPEG zurück geliefert.
Im ersten Beitrag habe ich nochmals meine Config aktualisiert => wird jetzt alles über basicAuth aufgerufen aber auch damit kein Erfolg.
Hab eine Wansview NCL616W
mfg
Markus
Kommt die Fehlermeldung auch, während Du
motion_armed=0
eingestellt hast?
Ansonsten könnte es noch ein Problem mit dem user sein: Definiere mal an der Cam für FHEM einen anderen user mit Admin-Rechten. Ich hatte häufig Probleme, wenn ich per Direktaufruf über den Browser und FHEM den gleichen User benutzt habe. Ansonsten habe ich leider keine Idee mehr...
mkress, ich habe seit kurzem exakt die gleiche cam, hatte den gleichen Fehler, habe ihn hier im Forum gesucht und den thread gefunden. Kann dein Verhalten der Cam bzw. des IPCAM-Moduls also bestätigen. Eine Lösung habe ich leider noch nicht gefunden, es scheint ein Problem mit dem Bildformat zu sein, dass offensichtlich korrupt ist (was die Browser wohl nicht hindert es anzuzeigen, IPCAM aber schon). Anbei mal ein Bild, so wie es per Aufruf der URL im Browser ankommt, vielleicht hat ja jemand eine Idee...
Edit: mit meinen anderen Cams anderer Hersteller geht das prima und der Speicherpfad auf dem FHEM-Server ist derselbe, es kann also nicht an irgendwelchen Rechten etc. liegen.
Ich habe das gleiche Problem (nutze BasicAuth).
Im Modul wird folgender Aufruf genutzt um das Bild abzuholen:
GetFileFromURLQuiet($camURI)
Die Variable $camURI sieht bei mir gut aus:
http://USER:PASS@192.168.50.70/snapshot.cgi
Kann man ggf. einen anderen Aufruf als "GetFileFromURLQuiet" nutzen? Falls man eine Funktion findet, welche das angezeigte Bild extrahieren kann, könnte man im Modul über ein Attribut ja einen alternativen Aufruf einstellen lassen. So eine Art "Kompatibilitätsmodus" für doofe IPCams... :P
Hat noch niemand eine Lösung oder Workaround gefunden?
Leider nicht ... nach einem Kellereinbruch bei mir hat das Thema leider wieder an Aktualität gewonnen und ich wollte da die gleiche Kamera auch installieren, da unschlagbar preisgünstig, aber mit dem Bug ist die für mich da nutzlos ... oder kennt jemand evtl. eine ähnlich günstige, bei der das Bild-Abholen mit dem Modul geht?
Hallo,
ich habe es mal aus Interesse mit einer Instar-3010 getestet.
define testcam IPCAM 192.168.178.18:85
attr testcam path snapshot.cgi?user=user&pwd=pwd
attr testcam storage /opt/fhem/www/images
Mit get testcam image
werden snapshots.jpg abgespeichert.
Aber mal prinzipiell:
Wenn's innerhalb FHEM doch noch Probleme geben sollte, die IPCams können doch auch von sich aus
bei Motion Detection z.B. Snapshots per FTP verschicken.
Falls der Keller jetzt akut gefährdet ist, wäre das doch erst mal eine Alternative,
die auch noch sofort funktioniert. ;)
Gruß
Meine IP Cam liegt seit dem eher rum. :P
Aber eine Lösung wäre natürlich schön, gerade weil der Bildaufruf ja funktioniert über Browser. Schwer zu verstehen, dass es über Perl nicht möglich sein soll. ;)
Die Variable $camURI sieht bei mir gut aus:
Code: [Auswählen]
http://USER:PASS@192.168.50.70/snapshot.cgi
Was bekommst Du denn zurück, wenn Du per wget diese URL aufrufst?
Zitat von: betateilchen am 05 Dezember 2014, 13:16:59
Die Variable $camURI sieht bei mir gut aus:
Code: [Auswählen]
http://USER:PASS@192.168.50.70/snapshot.cgi
Was bekommst Du denn zurück, wenn Du per wget diese URL aufrufst?
Das werde ich heute nachmittag testen wenn ich zu Hause bin und melde mich dann wieder.
Anscheinend funktioniert die Authorisierung nicht vernünftig.
root@homeserver:~# wget -S http://admin:123456@192.168.50.70/snapshot.cgi
--2014-12-05 15:48:54-- http://admin:*password*@192.168.50.70/snapshot.cgi
Verbindungsaufbau zu 192.168.50.70:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort...
HTTP/1.1 401 Unauthorized
Server: GoAhead-Webs
Date: Fri Dec 5 14:48:54 2014
WWW-Authenticate: Digest realm="GoAhead", domain="",qop="auth", nonce="d703861747b3422efb854261f55a21c4", opaque="5ccc069c403ebaf9f0171e9517f40e41",algorithm="MD5", stale="FALSE"
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Fehler beim Schreiben der HTTP-Anforderung: Ungültiger Dateideskriptor.
Erneuter Versuch.
Auch ein manuelles angeben per Option funktioniert nicht.
wget --user=admin --password=123456 http://192.168.50.70/snapshot.cgi
Hast du ne Idee?
siggi, also das is bei der cam "normal". Du musst die Authentifizierung da definitiv an die URL anhängen, HTTP-Auth kann die nicht. Und dann geht das auch per WGet:
[root@cubie:/home/peterk]# wget -S "http://192.168.178.23/snapshot.cgi?user=admin&pwd=123456"
--2014-12-05 16:45:00-- http://192.168.178.23/snapshot.cgi?user=admin&pwd=123456
Connecting to 192.168.178.23:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: GoaHead
Tue, 12 Jun 2012 01:56:34 GMT
Content-Type:image/jpeg
Content-Length:4760
Connection: close
Length: 4760 (4.6K) [image/jpeg]
Saving to: `snapshot.cgi?user=admin&pwd=123456.4'
100%[====================================================================================================================================================================================================>] 4,760 --.-K/s in 0s
2014-12-05 16:45:00 (51.5 MB/s) - `snapshot.cgi?user=admin&pwd=123456.4' saved [4760/4760]
Geht auch im Browser und sonstewo, nur per IPCAM-Modul leider nicht ... hab schon viel gesucht und versucht. irgendwo hab ich mal den tipp gelesen, den GetFileFromURLQuiet()-Call durch einen get()-call aus dem Paket LWP::Simple zu ersetzen, das lässt aber mein FHEM sofort kommentarlos sterben (obwohl das Paket per cpan installiert ist) ...
Danke auch für den Tipp mit dem Workaround, ist aber bei der Cam nicht drin - die kann nur dauerhaft oder per Alarm-Eingang getriggert Bilder irgendwo per FTP hinschieben, Bewegungserkennung hat die nicht. Und da noch nen Funkschaltaktor dranzuhängen würde ihren Wert verdoppeln ;-) - kann sie doch, werde ich erstmal so machen :-)
Ich würd mir aber auch nur ungern ne teurere in den Keller hängen, sonst ist die beim nächsten Einbruch gleich mit weg :-D
Edit: nochmal mit wget -S ausgeführt
Könnte das Problem vielleicht der falsche Zeitstempel sein, den der Webserver in der Cam mitschickt? Die Uhr in der Kamera ist richtig eingestellt (im Webinterface steht die korrekte Zeit, NTP ist eingetragen), aber das was als Antwort auf das wget kommt (oben im Posting) liegt mehrere Jahre daneben ...
Zitat von: peterk_de am 05 Dezember 2014, 16:49:42
Könnte das Problem vielleicht der falsche Zeitstempel sein, den der Webserver in der Cam mitschickt? Die Uhr in der Kamera ist richtig eingestellt (im Webinterface steht die korrekte Zeit, NTP ist eingetragen), aber das was als Antwort auf das wget kommt (oben im Posting) liegt mehrere Jahre daneben ...
Die Zeit im wget liegt genau eine Stunde zurück. Die Zeit wird durch NTP aktuell gehalten und auf dem Webinterface korrekt angezeigt. Keine Ahnung, warum der HTTP Request was anderes ausspuckt, da habe ich mich auch schon gewundert.
Zitat von: peterk_de am 05 Dezember 2014, 16:42:18
siggi, also das is bei der cam "normal". Du musst die Authentifizierung da definitiv an die URL anhängen, HTTP-Auth kann die nicht. Und dann geht das auch per WGet:
In Firefox funktioniert der Link in der Syntax:
http://USER:PASS@192.168.50.70/snapshot.cgi
Das ist die gleiche Syntax die die Variable $camURI im Modul benutzt. Es funktioniert tatsächlich, wenn ich user und pass als CGI Parameter übergebe. Dass die "falsche" Syntax in Firefox funktioniert verwirrt natürlich etwas. Wahrscheinlich nimmer der Browser einem hier etwas Denkarbeit ab und korrigiert den Aufruf?!
Liegt hier der Hase im Pfeffer begraben? Ich glaube irgendwie nicht, dass die Lösung so einfach ist. :P Wenn doch, dann müsste man im Modul eine Art Authentifizierungsattribut haben. http-auth oder cgi-params. Je nachdem wird dann die Variable $camURI in einer anderen Syntax gespeichert und genutzt.
EDIT: Nicht dass es sowas schon gibt... *erst mal schnell commandref durchles*
EDIT2: Dafür ist anscheinend das Path Attribut da. Ich bin der Meinung ich hatte das damals bereits probiert und das hat auch nicht zum Erfolg geführt, genauso wie eben.
Habe noch mal kurz vor dem Snapshot ein Log eingebaut. Mit meinem neuen Path Attribut und ohne basic auth Attribut (keine Ahnung ob das auch eine Auswirkung hatte), sieht die Variable folgendermaßen aus:
2014.12.05 18:29:47 1: Variable camURI: http://192.168.50.70/snapshot.cgi?user=admin&pwd=123456
2014.12.05 18:29:47 1: IPCAM myipcam Wrong or not supported image format: error while reading source image:
Die Variable schaut jetzt also korrekt aus. Der Fehler bleibt trotzdem der gleiche.
Ein wget allerdings funktioniert, die runtergeladene Datei ist ein Bild. Nur der Aufruf "GetFileFromURLQuiet($camURI);" will irgendwie nicht.
wget "http://192.168.50.70/snapshot.cgi?user=admin&pwd=123456"
Müsste ein wget im Modul anstelle der GetFileFromURLQuiet() Routine nicht funktionieren? (ggf. muss die über wget runtergeladene Datei dann noch umbenannt werden)
Also ggf. einstellbar über ein Attribut oder eine Bedingung --> falls "GetFileFromURLQuiet()" ein "myipcam_snapshot.error while reading source image:" Fehler zurück gibt, dann halt wget durchführen?!?
Zitat von: siggi85 am 05 Dezember 2014, 18:41:54
2014.12.05 18:29:47 1: Variable camURI: http://192.168.50.70/snapshot.cgi?user=admin&pwd=123456
2014.12.05 18:29:47 1: IPCAM myipcam Wrong or not supported image format: error while reading source image:
Die Variable schaut jetzt also korrekt aus. Der Fehler bleibt trotzdem der gleiche.
Ein wget allerdings funktioniert, die runtergeladene Datei ist ein Bild. Nur der Aufruf "GetFileFromURLQuiet($camURI);" will irgendwie nicht.
Jupp, genau das meinte ich - bei mir exakt dieselbe Beobachtung; nun sind wir also wohl schon 3 ;-) wget über einen System-Call da einzubauen würde vermutlich gehen, ist aber reichlich unschön, das müsste schon mit Perl-Mitteln geschehen. Hast du schonmal die Methode per LWP::Simple --> get($camURI); probiert? Klappt bei mir allerdings auch nicht und ist ähnlich schwer zu debuggen, da FHEM kommentarlos zu geht.
Zitat von: peterk_de am 05 Dezember 2014, 20:05:25
Hast du schonmal die Methode per LWP::Simple --> get($camURI); probiert? Klappt bei mir allerdings auch nicht und ist ähnlich schwer zu debuggen, da FHEM kommentarlos zu geht.
Ne habe ich noch nicht probiert. Werde ich demnächst mal machen, aber da es bei dir auch nicht funktioniert hat, habe ich keine große Hoffnung. ;-)
Besser spät als nie. :P
Also auf der Bash kann ich über folgenden Befehl ein Bild extrahieren. Ich weiß leider nicht genau, wie ich das nun ins IPCAM Modul bauen kann, aber es sieht so aus, als wenn man es mit LWP::Simple extrahieren kann.
perl -MLWP::Simple -e 'getprint "http://192.168.50.70/snapshot.cgi?user=admin&pwd=123456"' >test.jpg
Gibt es hierzu weiterhin keine Lösung?
Wie bereits beschrieben, ist es möglich über Perl ein Bild auch von "unseren problematischen" IP Cams zu ziehen. Allerdings müsste das noch irgendwie ins Modul eingebaut werden. Ggf. mit einer Art "Kompatibilitätsmodus" welchen man über ein Attribut im IPCAM Modul steuern kann.
Wer ist denn der Maintainer vom IPCAM Modul. Oder noch besser, wie finde ich das selber raus? ;) Habe mein FHEM gerade nicht griffbereit.
Ich hab das jetzt erstmal außerhalb von FHEM mit einem System-Call gelöst. Die folgende Funktion kommt in die 99_myUtils.pm, nimmt curl (das installiert sein muss - sudo apt-get install curl) und man kann der Funktion eine Dauer in Sekunden übergeben, solange wird dann ein Videoclip aufgezeichnet ... Von daher ist ein korrigiertes IP-Cam modul für mich erstmal nicht mehr so interessant ;-(
sub record_webcam_flur($) {
my ($duration_sec) = @_;
my ($csec,$cmin,$chour,$cmday,$cmon,$cyear,$cwday,$cyday,$cisdst) = localtime();
my $filename = sprintf("%04d-%02d-%02d %02d-%02d-%02d Flur.mpg",$cyear+1900,$cmon+1,$cmday,$chour,$cmin,$csec);
my $ret = system("curl --max-time $duration_sec -s -o \"/var/webcam/$filename\" \"http://192.168.178.23/videostream.cgi?loginuse=admin&loginpas=passworthiereinsetzen\" &");
$ret =~ s,[\r\n]*,,g;
Log 3, "Aufzeichnung Kamera Flur für $duration_sec s in Datei $filename gestartet - Rückgabe $ret";
}
Wie grade im Thread zum IPCam Modul https://forum.fhem.de/index.php/topic,10772.msg558326.html#msg558326 (https://forum.fhem.de/index.php/topic,10772.msg558326.html#msg558326) von mir geschrieben, habe ich diesen Fehler bei mir durch eine simple Timeout Erhöhung beheben können. Fhem wartet nicht lange genug, bis die IP-/Web-Cam das Bild liefert.
In der fhem/FHEM/49_IPCAM.pm in der Zeile 380 den Aufruf von
$snapshot = GetFileFromURLQuiet($camURI);
ändern auf 10 Sekunden
$snapshot = GetFileFromURLQuiet($camURI, 10, "", 1, 5);
Das Fhem Wiki gibt Auskunft zu der Operation GetFileFromURLQuiet()
https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURLQuiet
Hallo Patrik,
Zitat von: Patrik.S am 10 Januar 2017, 22:41:26
habe ich diesen Fehler bei mir durch eine simple Timeout Erhöhung beheben können. Fhem wartet nicht lange genug, bis die IP-/Web-Cam das Bild liefert.
In der fhem/FHEM/49_IPCAM.pm in der Zeile 380 den Aufruf von
$snapshot = GetFileFromURLQuiet($camURI);
ändern auf 10 Sekunden
$snapshot = GetFileFromURLQuiet($camURI, 10, "", 1, 5);
Tausend Dank für diesen Hotfix!!!!
Seit 2,5 Jahren (!!!) "lebe" ich mit diesem Problem, v.a. bei Raspberry No-Ir Außen-Kameras, die mein Gebäude bei völliger Dunkelheit mit "Langzeitbelichtung" fotografieren und ziemlich viel aus dem Restlicht rausholen. Da hatte ich oft, aber nicht immer, das WRONG IMAGE FORMAT.
Jetzt funktioniert es.
Viele Grüße,
Heiko