IPCAM mit Axis Kamera liefert Wrong or not supported image format

Begonnen von Alcamar, 13 Juli 2016, 16:21:29

Vorheriges Thema - Nächstes Thema

Alcamar

Hoffe im richtigen Thread unterwegs zu sein.

Ich setze die IP-Kamera AXIS 3024LVE ein, die wie folgt in fhem eingebunden ist:

attr Cam02 basicauth {USERNAME}:{PASSWORD}
attr Cam02 credentials /opt/fhem/FHEM/ipcam.conf
attr Cam02 delay 5
attr Cam02 icon it_camera
attr Cam02 path /jpg/image.jpg
attr Cam02 room Außenbereich
attr Cam02 snapshots 2
attr Cam02 storage ./www/snapshots


Leider wird beim Aufruf von

get image Cam02


der folgende Fehler ins Log geschrieben:

IPCAM Cam02 Wrong or not supported image format: error while reading source image:


Analog setze ich auch eine AXIS M3037 ein, die mit den gleichen Einstellungen problemlos läuft und auch Bilder in das vordefinierte Verzeichnis aufnimmt.

Leider habe ich keine richtige Vorgehensweise um den Fehler zu analysieren.

  • Kann jemand mit dem Fehler etwas anfangen?
  • Kann ich irgendwie prüfen, ob die Kamera oder fhem nicht richtig konfiguriert sind?

Für Anregungen jeder Art bin ich sehr dankbar. Die Fehlermeldung habe ich im Forum schon gefunden (https://forum.fhem.de/index.php?topic=39022.0), aber dort keine Fehlerlösung für mich ausfindig gemacht.


speex

Hi vielleicht bringt dich das ein wenig weiter: https://forum.fhem.de/index.php?action=post;quote=425265;topic=10772.90;last_msg=467236

Zitat von: Tompsg am 15 März 2016, 23:50:28
Ich versuche hier nochmal eine Lösung für das Problem "Wrong or not supported image format: unknown" zusammen zu fassen und hoffe, dass es Verzweifelten hilft  :)

Zunächst gilt es festzustellen, ob das Problem mit der hier beschriebenen Lösung umgangen werden kann. Da das Modul 49_IPCAM hierfür keine Debug-Option hat, muss es von Hand erweitert werden. Dies wurde weiter oben im Thread bereits angeregt.

Also im fhem/FHEM-Verzeichnis die Datei 49_IPCAM.pm öffnen und folgende Stelle suchen (Zeile 380)


...
  $timestamp =~ s/(:|-)//g;

  $snapshot = GetFileFromURLQuiet($camURI);

  $imageFormat = IPCAM_guessFileFormat(\$snapshot);

  my @imageTypes = qw(JPEG PNG GIF TIFF BMP ICO PPM XPM XBM SVG);
...


Dort die beiden beiden Debug-Ausgaben einfügen:


...
  $timestamp =~ s/(:|-)//g;

  $snapshot = GetFileFromURLQuiet($camURI);
  Log 1, "IPCAM $name URI: $camURI";
  Log 1, "IPCAM $name Snapshot: $snapshot";

  $imageFormat = IPCAM_guessFileFormat(\$snapshot);

  my @imageTypes = qw(JPEG PNG GIF TIFF BMP ICO PPM XPM XBM SVG);
...


Jetzt in FHEM ein "reload 49_IPCAM" eingeben und mit "get camname image" einen neuen snapshot anfordern. Im Log findet Ihr nun die Ausgaben, die wir benötigen. Interessant ist die zweite Zeile, den hier erwartet das Modul eigentlich das Kamerabild. Steht hier ein solcher oder ähnlicher Text, dann findet Ihr weiter unten eine Lösung dazu. Ansonsten die beiden oben eingefügten Zeilen wieder entfernen, da der Bildinhalt im Log nicht schön ist.


2015.07.13 22:00:48.629 1: IPCAM Kamera1 URI: http://192.168.1.1:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=guest&pwd=guest
2015.07.13 22:00:48.637 1: IPCAM Kamera1 Snapshot: <html><body><img src="../snapPic/Snap_20150713-220101.jpg"/></body></html>
2015.07.13 22:00:48.639 1: IPCAM Kamera1 Wrong or not supported image format: unknown


Die Lösung ist nun den Link anzupassen und erneut an die Funktion GetFileFromURLQuiet zu senden. Dazu schneiden wir den relevanten Teil aus dem String heraus, indem wir Startpunkt und die Länge ermitteln.


          1         2
01234567890123456789012345
<html><body><img src="../snapPic/Snap_20150713-220101.jpg"/></body></html>
                                  1         2         3
                         12345678901234567890123456789012



Hier also ab Position 25 mit einer Länge von 32 Zeichen. Nun erweitern wir die 49_IPCAM.pm um folgende Kommandos.


...
  $timestamp =~ s/(:|-)//g;

  $snapshot = GetFileFromURLQuiet($camURI);
  Log 1, "IPCAM $name URI: $camURI";
  Log 1, "IPCAM $name Snapshot: $snapshot";

  $snapshot="http://$camAuth/".substr($snapshot,25,32);
  Log 1, "IPCAM $name SnapshotNeu: $snapshot";

  $snapshot = GetFileFromURLQuiet($snapshot);

  $imageFormat = IPCAM_guessFileFormat(\$snapshot);

  my @imageTypes = qw(JPEG PNG GIF TIFF BMP ICO PPM XPM XBM SVG);
...


Nun wieder reload und get image und dann solltet ihr in der Debug-Ausgabe eine korrekt formatiere URL sehen. Damit sollte das Modul jetzt arbeiten können. Der Nachteil ist, dass nun unterschiedliche Kameras nicht mehr laufen. Daher wäre es prima die Funktion als Option im Modul einzubauen.

Viele Grüße,
Thomas

Alcamar

Die Url für die Kamera nach einem get image wird in IPCAM richtig gebildet. Diese Url (http://user:passwort@192.168.178.57:82//jpg/image.jpg) funktioniert in einem Browser auch problemlos und liefert ein aktuelles Bild.

Probleme in der 49_IPCAM macht die folgende Zeile:
$snapshot = GetFileFromURLQuiet($camURI);
GetFileFromURLQuiet liefert eine leere Zeichenkette und damit verursacht
$imageFormat = IPCAM_guessFileFormat(\$snapshot);
die bekannte Fehlermeldung im Titel des Threads.

@speex: Damit komme ich auch mit der Anleitung in Deiner Antwort leider nicht weiter. Dort wird davon ausgegangen, dass $snapshot nicht leer ist, sondern etwas "verzogen", oder verstehe ich das falsch?
Zitat"Interessant ist die zweite Zeile, den hier erwartet das Modul eigentlich das Kamerabild. Steht hier ein solcher oder ähnlicher Text, dann findet Ihr weiter unten eine Lösung dazu. [...]"

Mein 49_IPCAM funktioniert sonst mit INSTAR und AXIS Kameras und ich habe ein ungutes Gefühl darin Änderungen vorzunehmen. Zumal die beim nächsten Update vermutlich wieder weg sind. Im Moment würde mir nur noch einfallen in 49_IPCAM hart codiert diese eine "problematische" Kamera abzufangen und den Wert für $snapshot individuell zu setzen. Besonders elegant ist das nicht und ob es überhaupt geht, weiß ich auch nicht. Ich bin kein Entwickler.  :-[

Beim Experimentieren ist mir eines noch aufgefallen was ich auch noch nicht kapiere und vielleicht die Ursache erklären könnte.
ich kann alle Kameras in meinem Netz anpingen. Nur diese eine problematische Kamera nicht.
... icmp_seq=1 Destination Host Unreachable
Betrifft nur ping. Sonst ist die Kamera im Netz problemlos erreichbar.

Alcamar

Nicht gelöst, aber die Ursache habe ich wohl identifiziert. Es liegt wohl am Netzwerk. Wenn ich mein CubieTruck direkt mit der Fritzbox verbinde (LAN), kann ich die Kamera anpingen und sie funktioniert in fhem, wie ich es erwarte. Hängt der CubieTruck über PowerLan an der Fritzbox macht nur diese eine Kamera Probleme in fhem. Sonst kann ich mich aber im Netz auf die Kamera auschalten und darauf arbeiten. Aber kein Ping möglich:
icmp_seq=1 Destination Host Unreachable
Mein Problem ist damit nicht gelöst.  :( Ein Netzwerkprofi bin ich auch nicht.  :'(
Wenn ich herausfinde warum ping nicht geht, weiss ich vermutlich auch was das "Problem" mit IPCAM ist.