Modul IPCAM überarbeitet

Begonnen von Martin Fischer, 01 Februar 2013, 20:30:37

Vorheriges Thema - Nächstes Thema

Shadow3561

#120
Danke.
Ich werde mich gleich mal ransetzen und es über die Woche ausprobieren.

Mit freundlichen Grüßen

Shadow3561

#121
Hallo Jojo11,

Muss ich noch Ergänzungen machen?
Habe das Script in die 99_myUtils eingefügt und ein paar Bilder mit "get Ipcam Image" gemacht, es werden jedoch keine Bilder gespeichert im angegebenen Pfad.

Ich habe es mit dem "Timestamp" Attribut versucht und ohne.


Internals:
   AUTHORITY  192.168.1.38
   DEF        192.168.1.38
   NAME       CamAuffahrt
   NR         35
   SEQ        0
   STATE      letztes Bild: 2016-10-15 18:49:11
   TYPE       IPCAM
   Helper:
     Dblog:
       Last:
         Logdb:
           TIME       1476550153.25252
           VALUE      CamAuffahrt_snapshot.jpg
       Snapshots:
         Logdb:
           TIME       1476550153.25252
           VALUE      1
   Readings:
     2016-10-15 18:49:13   last            CamAuffahrt_snapshot.jpg
     2016-10-15 18:49:11   snapshot1       CamAuffahrt_snapshot_1.jpg
     2016-10-15 18:49:13   snapshots       1
Attributes:
   basicauth  admin:*******
   delay      0
   group      Kamera
   icon       it_camera
   path       Streaming/channels/201/picture
   room       Cams
   storage    ./www/snapshots/CamAuffahrt

Jojo11

Hallo,

vor Allem musst Du es mal aufrufen, sonst kann es ja nichts machen  :o
Testen z.B., indem Du es mit

{GetLastPics("CamAuffahrt", 1)}

aufrufst.
IPCAM gibt mir die letzten Bilder als Readings "snapshot1", "snapshot2", "snapshot3", ... aus. Die Werte sind dann "CAM01_20161015_192138.jpg", ... (s. Anhang).
Ggf. musst Du das bei Dir anpassen. Meine Version von IPCAM ist etwas älter - falls da in letzter Zeit was geändert wurde. Mir reichte die Anzahl der Kommandos nicht, weshalb ich es angepasst habe.
Aber als Starthilfe sollte es reichen  ;)

schöne Grüße
Jo

visionsurfer

Hallo,

ich lasse meine Tür durch eine Mobotix S15 Kamera überwachen. Ich kann mir URL, sowohl den Live Stream aufrufen, als auch einfach nur ein gerade geschossenes Bild. Livestream ist erst mal nebensächlich.

Ich bekomme über den Browser mit folgender URL ganz normal ein Live Bild:

http://192.168.178.225/record/current.jpg

Meine Definition sieht nun wie folgt aus:


Internals:
   AUTHORITY  192.168.178.225
   CFGFN
   DEF        192.168.178.225
   NAME       mobotix
   NR         3985
   SEQ        0
   STATE      last: 2016-10-29 17:23:49
   TYPE       IPCAM
   Readings:
     2016-10-29 17:23:49   last            mobotix_snapshot.jpg
     2016-10-29 17:23:49   snapshot1       mobotix_snapshot_1.jpg
     2016-10-29 17:23:49   snapshots       1
Attributes:
   path       record/current.jpg
   room       Geräte
   storage    ./www/snapshots


Kann ich irgendwie kontrollieren, ob da auch ein Bild gemacht wurde und wie dieses Bild aussieht ?

Kann ich das irgendwie aufrufen oder mir irgendwie anzeigen lassen ?
Ich bin mir auch unsicher ob mein Path richtig ist ?

Also muss es heißen /record/current.jpg oder record/current.jpg

Grüße,
Visionsurfer




visionsurfer

Hi,

ich habe es rausgefunden. Damit kann ich das Bild öffnen:

http://192.168.178.49:8086/fhem/www/snapshots/mobotix_snapshot.jpg

Ich hab dann noch mal mit dem GET Befehl ein neues Image angefordert und schon was das Bild aktuell. Scheint also zu funktionieren. Sehr gut. Vielen Dank.

Ich denke so kann ich erst mal weiter machen.

Grüße,
Visionsurfer

cameli2

Hallo coh3r3nt,
ich habe ebenfalls die Edimax IC-3115W im Einsatz.

Dank Deines Hinweises auf die Seite https://www.ispyconnect.com/man.aspx?n=Edimax bin ich nicht nur auf die Lösung meines Problems (Bilder von der Cam generell einzulesen), sondern auch auf die Lösung Deines Wunsches gekommen.
Der Trick ist, die Account-Daten vor die IP-Adresse zu setzen, also
define IC3115W IPCAM [user]:[password]@192.168.xxx.yyy
In diesem Fall müssen für die Strings [user] und [password] die Account-Daten entsprechend ersetzt werden.

Das funktioniert auch, wenn man die Account-Daten über das separate Credencial-File (mittels attr credencials) einsetzt:
define IC3115W IPCAM {USERNAME}:{PASSWORD}@192.168.xxx.yyy
attrib IC3115W credencials /opt/fhem/ipcam.conf


In beiden Fällen braucht dann das Attribut basicauth nicht gesetzt werden.

Und das Wichtigste zum Schluss:
get IC3115W image
funktioniert auch. Zumindest bei mir...

Grafkox

Hallo zusammen,

ich implementiere gerade Überwachungskameras in FHEM und möchte mit FHEM auch die Bewegungserkennung ein- und ausschalten.

Anhand des Howto´s von pitman habe ich es geschafft, die Bewegungserkennung meiner Hikvision-Kameras mittels CURL-Aufruf aus der FHEM-Befehlszeile zu aktivieren/deaktivieren.

Leider funktioniert die nachfolgenden Befehl mit cmd01 und cmd02 allerdings nicht:

cmd01:{ qx(curl -T Motion_Detection_an.xml http://user:pwd\@IP/ISAPI/Smart/fielddetection) }

cmd02:{ qx(curl -T Motion_Detection_aus.xml http://user:pwd\@IP/ISAPI/Smart/fielddetection) }
   
Hat jemand eine Idee wie man die Befehle im IPCAM-Modul verwenden kann?

Vielen Dank und viele Grüße

Thorsten
Raspberry Pi 3 mit Fhem 5.9, Tablet UI 2.6, SIGNALduino, Somfy RTS, Fritzbox 7490, IT-Steckdosen, Hikvision Kameras, Xiaomi Sensoren, Tecalor THZ, E3/DC

Patrik.S

Meine alten Smartphones werden mit der "IP Webcam" App zu Überwachungszwecken weiter benutzt.

Nicht immer, aber dann doch irgendwann bekomme ich diesen bekannten Fehler im Logfile
IPCAM MyIPCam Wrong or not supported image format: error while reading source image:

Bei mir hat dann immer ein kompletter Raspi System reboot geholfen.
Das kann's aber auch nicht im entscheidenen Augenblick sein

Die simple Lösung ist bei mir: Der Default Timeout Wert ist einfach zu klein. Fhem als Client wartet einfach zu kurz, während die Webcam noch gar nicht fertig ist, das Bild zu liefern.


Auf die Lösung bin ich über den Post "IPCAM mit Axis Kamera liefert Wrong or not supported image format" https://forum.fhem.de/index.php/topic,55584.msg471865.html#msg471865 gekommen.

Da wird die Zeile erwähnt, wo mit dem GetFileFromURLQuiet() Aufruf im Modul 49_IPCAM das Bild geholt wird.
Und die zusätzliche Logausgabe von Log 1, "IPCAM $name Snapshot: $snapshot"; war immer leer, anstatt des Bildes

Das Fhem Wiki gibt Auskunft, das man noch optionale Parameter setzen kann.
https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURLQuiet

Nachdem ich nun folgendes nutze, bekomme ich immer zuverlässig ein Bild$snapshot = GetFileFromURLQuiet($camURI, 10, "", 1, 5);

Der Negativ Gegentest mit 1 Sek Timeout zeigt dann wiederum wie erwartet immer den Fehler
$snapshot = GetFileFromURLQuiet($camURI, 1, "", 1, 5);

Andre0909

Zitat von: Jojo11 am 15 Oktober 2016, 17:17:22
Hallo,

Du kannst diese sub in die 99_myUtils.pm kopieren:


sub GetLastPics($$)
{
my ($cam,$shot) = @_;
my $cmd="";
my $old="";
my $new="";
my $j=0;
my $path='./www/snapshots/';
my $pic=$path.ReadingsVal($cam,'snapshot'.$shot,'');
$cmd=chr(34).'rm '.$path.'last/'.$cam.'_10.jpg'.chr(34);
fhem("$cmd");
for(my $i=9;$i>0;$i--) {
  $j=$i+1;
  $old=$path.'last/'.$cam.'_'.$i.'.jpg';
  $new=$path.'last/'.$cam.'_'.$j.'.jpg';
  $cmd=chr(34).'cp '.$old.' '.$new.chr(34);
  fhem("$cmd");
}
$cmd=chr(34).'cp '.$pic.' '.$path.'last/'.$cam.'_1.jpg'.chr(34);
fhem("$cmd");
}


Diese Funktion kopiert neue Bilder in einen Ordner und benennt sie um in CAMxy_1, CAMxy_2 usw.
Da nicht immer das erste der geschossenen Bilder das "Gute" ist, kann man mit $shot auch das zweite usw. wählen (=2).
Die Bilder werden dann immer umbenannt, sobald ein neues dazu kommt. In FTUI musst Du dann nur die 10 (oder entsprechend weniger) Bilder anzeigen.
Nicht wirklich hübsch, aber funktional  ::)

schöne Grüße
Jo

Hallo zusammen, hierzu benötige ich auch eure Hilfe. IPCAM zeichnet bei mir 2 Snapshots auf wenn es an der Tür klingelt. In FTUI kann ich mit Zeit und Datum des Klingelns anzeigen lassen, dazu würde ich gerne die 2 Snaps einblenden. Das soll z.B. für die letzten 5 Klingelaktionen also bei 10 Screens passieren. Leider lässt sich das mit IPCAM Readings nicht darsellen da nur die letzte SNAP-Aktion als Reading aufgezeichnet wird. Setze ich Timestamps habe ich zwar die Screens aber kann wegen unterschiedlicher Namen sie nicht fest einbinden.

Eigentlich hatten wir in einem anderen Thread eine Lösung mit einer SUB, welche die Dateinamen durchsuchte und dann per -F8 nur den Dateinamen ausgab. Die SUB wurde alle 5 min aufgerufen und die readings in ein dummy geschrieben. Das ging allerdings nicht mehr, weil, warum auch immer, bei manchen Snaps das Verzeihnis unter -f8 bei manchen unter -f7 auftauchte.

Ich denke oben verlinkte SUB könnte die Lsöung sein, da somit feste Daeinamen mit dem IMAGE-Widget aufgerufen werden. Mangels meiner PERL-KEntnisse raffe ich jedoch nicht, wie ich diese abändern und/oder richtig in Fhem dann einbinden kann. Meine Screens liegen in www/tablet/image/Kamera .... Bin über jede Hilfe dankbar! DANKE

Andre0909

Habe jetzt die Funktion mit meinen Ordner angepasst.

Wenn ich Sie aufrufe {...("Draussen", 1)} bekomme ich im Log:

rm: das Entfernen von ,,./www/tablet/images/Kamera/last/Draussen_10.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_9.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_8.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_7.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_6.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_5.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_4.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_3.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_2.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: der Aufruf von stat für ,,./www/tablet/images/Kamera/last/Draussen_1.jpg" ist nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Verzeichnis ,,./www/tablet/images/Kamera/" wurde ausgelassen


Irgendwie raff ich die Funktion der SUB wohl noch nicht

Tueftler1983

#130
Hallo ich habe ein Problem
Wenn ich das
192.168.2.101:86/web/cgi-bin/hi3510/param.cgi?cmd=preset&-act=goto&-number=1

I'm Browser eingebe, Fährt die Kamera eine definierte Position an. Aber ich bekomme es nicht hin über dein Modul die Position anzufahren.

Kannst du mir sagen wie ich die Attribute setzen muss?

weini

Feature Request: Timestamp als {timestamp} Variable

Ich kämpfe gerade mit der neuen Webcam der AllianzArena:
Über folgende Website werden die Bilder im 10 Sekunden-Takt aktualisiert: https://allianz-arena.com/de/die-arena/webcams/esplanade
Das konkrete Bild gibt es über folgende URL: https://allianz-arena.com/static-content-upload/webcam/esplanade-webcam-image-01.jpg

Aber Achtung: Die Gemeinheit ist, dass sich das Bild unter der zweiten URL nach dem ersten Aufruf nicht aktualisiert wird. Es wird nur ein neues Bild gezogen, wenn die URL sich ändert. Erreicht wird das in der Website (erste URL), in dem via JS ein sich ändernder Suffix angehängt wird. Der JS Code hänngt hier ein Datum an, tatsächlich reicht es aber aus, wenn "irgendeine" neue URL generiert wird, also sinngemäß https://allianz-arena.com/static-content-upload/webcam/esplanade-webcam-image-01.jpg?_2017-03-08_08-23

Was mir hier unglaublich helfen würde wäre ein Platzhalter analog zu {USERNAME} und {PASSWORD}, der sich irgendwie ändert. Sinnvoll wäre hier ein {TIMESTAMP}, der Datum und Uhrzeit enthält, also etwas in der Art: {TIMESTAMP} => "2017-03-08_08-23"

Wäre das mit vertretbarem Aufwand realiserbar?

Viele Grüße,
weini

weini

So, ich habe mir jetzt mal selbst geholfen:

Anbei ein Patch für IPCAM. Es wird zusätzlich der Platzhalter {TIMESTAMP} eingeführt, der das aktuelle Datum im Format "YYYY-MM-TT_HH-MI-SS" zurückliefert. Die Ersetzung im Attribut "path" wird aktuell nur bei einem "GET IMAGE" durchgeführt.

Ich würde mich sehr freuen, wenn der Patch in die nächste Version wandert. Nützlich ist das nur für öffentliche Webcams, die beim Abruf der Bilder etwas "zickig" sind. Es schadet aber nichts und die Änderung im Modul ist minimal.

wolfram

Hallo zusammen,

seit einiger Zeit setze ich das ipcam-modul erfolgreich ein. Beim Auslösen eines Kontaksensors verschicke ich ein Bild per Telegram. Das klappt alles wunderbar. Leider bekomme ich nicht immer das letzte aufgenommene Bild, sondern das vorletzte.
Meine Frage: wie bekomme ich es hin, dass immer da letzte Bild aus meinem Ordner "snapshots" versendet wird?

hier mein notify:

#Notify für Bildversand von Telegram
define testdoor notify Tuerstatus:on set cam pos 1;;get cam image;;set my_bot sendPhoto /opt/fhem/SonosSpeak/snapshots/cam_snapshot.jpg
attr testdoor room Notify


und hier meine Kameradefinition:

# IP CAM
define cam IPCAM 192.168.1.xx
attr cam basicauth meinusername:meinpasswort
attr cam cmdPanLeft command=4
attr cam cmdPanRight command=6
attr cam cmdPos01 command=31
attr cam cmdPos02 command=33
attr cam cmdPos03 command=35
attr cam cmdPos04 command=37
attr cam cmdStep onstep
attr cam cmdTiltDown command=2
attr cam cmdTiltUp command=0
attr cam delay 5
attr cam genericDeviceType security
attr cam icon it_camera
attr cam path snapshot.cgi?user=meinusername&pwd=meinpasswort
attr cam pathPanTilt decoder_control.cgi?
attr cam room Homekit,Wohnzimmer
attr cam snapshots 2
attr cam storage /opt/fhem/SonosSpeak/snapshots
attr cam timestamp 0


vielleicht kann mir jemand weiterhelfen - das wäre ein tolles Ostergeschenk.

Danke ,
wolf

Tueftler1983

Ich mache es mit DOIF und warte 2 sek von dem Moment wo das Bild gemacht wird zu dem Zeitpunkt an dem ich es sende