Modul IPCAM überarbeitet

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

Vorheriges Thema - Nächstes Thema

MiMoAC

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://username:passwort@192.168.xxx.xxx:554/11
attr IPKAMERA room IP Kamera
attr IPKAMERA snapshots 1
attr IPKAMERA storage /opt/fhem/www/snapshots/cam1

Brockmann

Zitat von: MiMoAC am 11 September 2017, 11:34:53
rtsp://admin.admin@192.168.xxx.xxx:554/11   (Dieser Link funktioniert auch im VLC-Player)
RTSP ist ein Streaming-Protokoll. Darüber überträgt die Kamera Video und Audio.
Für IPCAM benötigst Du aber Snapshots, also Einzelbildaufnahmen.

Du musst als einen Link finden, unter dem Du jeweils ein Einzelbild abrufen kannst.

dk3572

Hallo,

ich versuche über das Modul ipcam meine Instar 5907HD zu steuern. Leider ohne Erfolg.
Ich habe diesen und viele weitere Beiträge bereits mehrfach gelesen. Auch diese Seite
https://www.fischer-net.de/hausautomation/fhem/62-fhem-modul-ipcam-ueberarbeitet.html
mehrfach gelesen. Mir erschließt sich nicht wie ich diese Befehle https://wiki.instar.de/1080p_Series_CGI_List/
in das Modul eintagen muss.

Vielleicht kann mir bitte jemand behilflich sein oder seine Einstellungen zeigen?

defmod ipcam_Hof IPCAM 192.xxx.xxx.xxx:xxxx
attr ipcam_Hof basicauth {USERNAME}:{PASSWORD}
attr ipcam_Hof cmd01 param.cgi?cmd=setinfrared&-infraredstat=auto
attr ipcam_Hof credentials /opt/fhem/ipcam.conf
attr ipcam_Hof path snapshot.cgi?user={USERNAME}&pwd={PASSWORD}
attr ipcam_Hof pathCmd param.cgi?cmd=getinfrared
attr ipcam_Hof room Alarme
attr ipcam_Hof snapshots 1
attr ipcam_Hof storage /opt/fhem/ipcam


Vielen Dank im Voraus.

Schlimbo

Hallo dk3572,

Ich habe eine INSTAR 8015 Full HD, hier meine Einstellungen:
defmod Cam1 IPCAM 192.xxx.xxx.xxx:80
attr Cam1 basicauth {USERNAME}:{PASSWORD}
attr Cam1 cmd01 cmd=setinfrared&-infraredstat=auto
attr Cam1 cmd03 cmd=setinfrared&-infraredstat=close
attr Cam1 cmd04 cmd=setioattr&-io_enable=1&-io_flag=1
attr Cam1 cmd05 cmd=setioattr&-io_enable=0&-io_flag=0
attr Cam1 cmd06 cmd=setmdalarm&-aname=type&-switch=on
attr Cam1 cmd07 cmd=setmdalarm&-aname=type&-switch=off
attr Cam1 cmd08 cmd=setmdattr&-name=1&-enable=1
attr Cam1 cmd09 cmd=setmdattr&-name=1&-enable=0
attr Cam1 cmdPanLeft -act=left
attr Cam1 cmdPos01 -act=goto&-number=0
attr Cam1 cmdPos02 -act=goto&-number=1
attr Cam1 cmdPos03 -act=goto&-number=2
attr Cam1 cmdPos04 -act=goto&-number=3
attr Cam1 cmdPos05 -act=goto&-number=4
attr Cam1 credentials /opt/fhem/IPcam_credentials.cfg
attr Cam1 delay 2
attr Cam1 path /tmpfs/snap.jpg
attr Cam1 pathCmd param.cgi
attr Cam1 pathPanTilt param.cgi?cmd=preset
attr Cam1 storage ./www/snapshots


Da deine Cam eine 720p Kamera ist solltest du diese Befehle verwenden:
https://wiki.instar.de/720p_Series_CGI_List/

Leider ist das mit dem Modul etwas undurchsichtig, wie sich die Befehle aus den Attributen pathPanTilt/pathCmd und path zusammensetzen.
Erst einen Blick in den Sourcecode brachte etwas Licht ins dunkle.

"cmd"-Befehle werden Intern so zusammengefügt:
<pathCmd>?<cmd>
schaut man sich jetzt den INSTART Befehl für die Infrarot LEDs an:
param.cgi?cmd=setinfrared&-infraredstat=auto
sieht man , wie die Attribute gesetzt werden müssen.
Da <pathCmd> und <cmdXX> im Modul mit einen "?"-Zeichen verbunden werden, sehen die Attribute wie folgt aus:
attr <name> pathCmd param.cgi
attr <name> cmd01 cmd=setinfrared&-infraredstat=auto

Die Befehle "set <name> pos" werten Intern so verschaltet:
<pathPanTilt>&<cmdPosXX>
Der INSTAR Befehl um einen Position anzufahren lautet:
param.cgi?cmd=preset&-act=goto&-number=0
Da <pathPanTilt> und <cmdPosXX> im Modul mit einen "&"-Zeichen verbunden werden, müssen die Attribute so gesetzt werden:
attr <name> pathPanTilt param.cgi?cmd=preset
attr <name> cmdPos01 -act=goto&-number=0

Der INSTAR Befehl um nach rechts zu schwenken lautet:
ptzctrl.cgi?-step=&-act=left
hier müssten dann die Attribute wie folgt gesetzt werden:
attr <name> pathPanTilt ptzctrl.cgi?-step=
attr <name> cmdPanLeft -act=left

Da für die "pan","tilt" und "pos" immer der Pfad "pathPanTilt" verwendet wird, muss man sich also entscheiden auf welchen Wert man "pathPanTilt" setzt.
Schön wäre hier ein extra Attribut "pathPos".

Ich steuere meine INSTAR ausschließlich über den raw Befehl, denn dann können die Befehle einfach so benutzt werden, wie sie auf der INSTAR-WIKI Seite stehen und man muss sich keine Gedanken über die Zusammensetzung der Attribute machen.
z.B
set <name> raw param.cgi?cmd=setinfrared&-infraredstat=auto

Hoffe das hilft dir etwas.
Gruß Schlimbo

dk3572

#154
Hallo Schlimbo,

vielen Dank für die ausführliche Hilfe!
Das mit den 720p ist mir auch bereits aufgefallen.
Habe alles wie von dir beschrieben umgesetzt, funktioniert aber immer noch nicht.
Bekomme diese Warnung:
ZitatPERL WARNING: Possible unintended interpolation of @IS in string at (eval 151402) line 5

Habe es gelöst. Lag an dem "@" in meinem Passwort. Passwort geändert, funzt!

Vielen Dank noch mal für deine sehr detaillierte Hilfe!

Gruß Dieter

berrnd

Hallo zusammen,

ich wollte heute eine DCS-5000L von D-Link einbinden, klappt auch alles mit dem Modul, bis auf dass die Nachtsicht-Infrarot-LEDs leider nur per POST und nicht per GET Request gesteuert werden können.

Ich habe dazu die Attribute cmdPostXX, analog cmdXX, und den Set-Befehl cmdPost eingebaut.
Heißt ein set cmdPost 1 führt dann entsprechend das Gleiche als POST-Request aus, wie set cmd 1, nur dass der Pfad aus dem Attribut pathCmdPost kommt und die Werte im Attribute cmdPost01 stehen.

Außerdem war nötig, dass die POST-Requests einen Referer-Header haben, dazu habe ich dann noch das Attribut cmdPostReferer hinzugefügt.

Falls das jemand was nützt, hier sind die Änderungen: https://github.com/berrnd/fhem-mirror/compare/master...berrnd:feature-IPCAM-postrequests
(Ich bin in Perl leider immer noch absolut nicht Zuhause, also seid dahingehend gerne nachsichtig...  :D)

Die Definition meiner Kamera sieht dann aktuell so aus
defmod Flur.Kamera IPCAM camera-flur
attr Flur.Kamera userattr streamurl
attr Flur.Kamera basicauth xx:xx
attr Flur.Kamera cmdPanLeft PanSingleMoveDegree=15&TiltSingleMoveDegree=15&PanTiltSingleMove=3
attr Flur.Kamera cmdPanRight PanSingleMoveDegree=15&TiltSingleMoveDegree=15&PanTiltSingleMove=5
attr Flur.Kamera cmdPos01 PanTiltPresetPositionMove=1
attr Flur.Kamera cmdPos02 PanTiltPresetPositionMove=2
attr Flur.Kamera cmdPos03 PanTiltPresetPositionMove=3
attr Flur.Kamera cmdPos04 PanTiltPresetPositionMove=4
attr Flur.Kamera cmdPos05 PanTiltPresetPositionMove=5
attr Flur.Kamera cmdPos06 PanTiltPresetPositionMove=6
attr Flur.Kamera cmdPos07 PanTiltPresetPositionMove=7
attr Flur.Kamera cmdPosHome PanTiltPresetPositionMove=7
attr Flur.Kamera cmdPost01 IRLed=0
attr Flur.Kamera cmdPost02 IRLed=1
attr Flur.Kamera cmdPostReferer http://camera-flur
attr Flur.Kamera cmdTiltDown PanSingleMoveDegree=15&TiltSingleMoveDegree=15&PanTiltSingleMove=7
attr Flur.Kamera cmdTiltUp PanSingleMoveDegree=15&TiltSingleMoveDegree=15&PanTiltSingleMove=1
attr Flur.Kamera group Kameras
attr Flur.Kamera path image/jpeg.cgi
attr Flur.Kamera pathCmdPost setControlDayNight
attr Flur.Kamera pathPanTilt pantiltcontrol.cgi?
attr Flur.Kamera room Flur
attr Flur.Kamera storage ./www/snapshots
attr Flur.Kamera streamurl http://xx:xx@camera-flur/video.cgi


Was ich auch noch ganz nützlich fände, wären Aliasnamen für die gespeicherten Positionen, evtl. bekomme ich das bei Gelegenheit ja auch noch hin...

Grüße,
Bernd

msfox

#156
Zitat von: Schlimbo am 19 November 2017, 19:35:49
Der INSTAR Befehl um nach rechts zu schwenken lautet:
ptzctrl.cgi?-step=&-act=left
Dann darf ich aber cmdStep nicht setzen oder?
Wenn ich das aber nicht setze, kann ich set cam1 pan left 1 nicht absetzen. Hier kommt der Fehler, dass cmdStep nicht gesetzt ist.


Ich habe eine IN-6014HD.
Die Befehle von der Seite https://www.instar.de/faq_cgi_hd klappen auch.

http://192.168.2.9/cgi-bin/hi3510/ptzctrl.cgi?-step=1&-act=left
definiert ist das Device wie folgt:

defmod cam1 IPCAM 192.168.2.9
attr cam1 alias Kamera 1
attr cam1 basicauth admin:qwertz
attr cam1 cmd01 cmd=setimageattr&-flip=on
attr cam1 cmd02 cmd=setimageattr&-flip=off
attr cam1 cmd03 cmd=setinfrared&-infraredstat=open
attr cam1 cmdPanLeft -act=left
attr cam1 cmdPanRight right
attr cam1 cmdStep -step
attr cam1 cmdTiltDown down
attr cam1 cmdTiltUp up
attr cam1 loglevel 6
attr cam1 path snap.jpg
attr cam1 pathCmd param.cgi?
attr cam1 pathPanTilt cgi-bin/hi3510/ptzctrl.cgi?
attr cam1 room Kameras
attr cam1 storage ./www/snapshots
attr cam1 webCmd pan left:pan right

Wenn ich den Befehl "set cam1 pan left" absetze passiert nix.
passiert nix:

Wenn ich attr cam1 pathPanTilt cgi-bin/hi3510/ptzctrl.cgi?-step=
passiert auch nix.

Wie wäre denn ein Beispiel, damit die Befehl https://www.instar.de/faq_cgi_hd richtig als URL in IPCAM umgesetzt werden.

Mit einem LOG kann ich leider nicht dienen. Trotz loglevel im IPCAM-Modul = 6 und in global = 4 ist das einzige was geloggt wird:

Was geht

GET cam1 image

und

set cam1 cmd01


D.h. irgendwie wird die URL für Pan und Til nicht sauber zusammengebaut.

msfox

#157
So folgendes klappt jetzt:

defmod cam1 IPCAM 192.168.2.9
attr cam1 alias Kamera 1
attr cam1 basicauth admin:qwertz
attr cam1 cmd01 cmd=setimageattr&-flip=on
attr cam1 cmd02 cmd=setimageattr&-flip=off
attr cam1 cmd03 cmd=setinfrared&-infraredstat=open
attr cam1 cmdPanLeft -act=left
attr cam1 cmdPanRight -act=right
attr cam1 cmdTiltDown -act=down
attr cam1 cmdTiltUp -act=up
attr cam1 delay 2
attr cam1 loglevel 6
attr cam1 path snap.jpg
attr cam1 pathCmd param.cgi?
attr cam1 pathPanTilt ptzctrl.cgi?-step=0
attr cam1 room Kameras
attr cam1 storage ./www/snapshots
attr cam1 webCmd pan left:pan right:tilt up:tilt down:raw ptzctrl.cgi%3F-step%3D0%26-act%3Dstop

Schöne wäre, wenn man den webCmd für STOP noch sinnvoller definieren könnte. Leider geht das nur via RAW, da ich für cmd-Befehle schon param.cgi verwende.
Auch klappt es nicht via cmdIcon hier Icons zuzuweisen.

berrnd

Zitat von: berrnd am 03 Januar 2018, 18:19:49
Was ich auch noch ganz nützlich fände, wären Aliasnamen für die gespeicherten Positionen, evtl. bekomme ich das bei Gelegenheit ja auch noch hin...

Das habe ich nun gebastelt - falls es wer nützlich findet: https://github.com/berrnd/fhem-mirror/compare/master...berrnd:feature-IPCAM-posaliases
(Die Anpassungen erfolgten unabhängig voneinander, als Basis hier habe ich wieder das aktuelle IPCAM Modul genommen.)

Man kann damit nun z. B. einen Alias für Position 1 definieren
attr Flur.Kamera cmdPos01Alias garderobe
und die dann einfach ansteuern
set Flur.Kamera pos garderobe
wobei ganz normal das Kommando aus cmdPos01 verwendet wird.

Der Vollständigkeit halber habe ich das auch für cmdXX ergänzt.

Grüße,
Bernd

blueberry63

Hallo,

ich sehe immer mal wieder folgenden Eintrag im LOG:


PERL WARNING: Use of uninitialized value $camret in concatenation (.) or string at ./FHEM/49_IPCAM.pm line 234


Hat jemand eine Idee, wo das herkommen könnte?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Patrik.S

Von deiner IP Kamera konnte kein Bild geholt werden.
Die Ausgabe
ZitatUse of uninitialized value $camret
kommt aus der IPCAM_Set()

Ich habe mir das Modul an den beiden Stellen erweitert, das es überprüft ob das Bild holen auch erfolgreich war.
Wenn die jeweilige Variable durch das jeweilige GetFileFromURLQuiet() Leer geblieben ist, dann gibt's eine etwas besser lesbare Warnung


     my $camret = GetFileFromURLQuiet($camURI, 10, "", 1, 5);
     $camret = "" unless defined $camret;
     if($camret eq '') {
       Log 1, "IPCAM $name IPCAM_Set() got not image in time!";
       ##Log 5, "IPCAM $name camURI was: $camURI"; # ACHTUNG! Diese Zeile nur im Notfall oder wenn neue IPcam in Betrieb genommen wird. URL enthält sensible Daten, wie z.B. auch User & Passwort !!!!
       return "Error IPCAM $name got not image in time!";
     }
     Log 5, "ipcam return:$camret";

   }
   return undef;



   $snapshot = GetFileFromURLQuiet($camURI, 10, "", 1, 5);
   $snapshot = "" unless defined $snapshot;
   if($snapshot eq '') {
     Log 1, "IPCAM $name IPCAM_getSnapshot() got not image in time!";
     ##Log 5, "IPCAM $name camURI was: $camURI"; # ACHTUNG! Diese Zeile nur im Notfall oder wenn neue IPcam in Betrieb genommen wird. URL enthält sensible Daten, wie z.B. auch User & Passwort !!!!
     return "Error IPCAM $name got not image in time!";
   }

   $imageFormat = IPCAM_guessFileFormat(\$snapshot);

RpiEinOzean

Hallo zusammen,
sitze hier gerade auch an den ersten Versuchen mit meiner HooToo.
@ Patrik.S.
Mir scheint wohl nur der richtige Pfad zu fehlen.
Kannst Du mir den, besser alles dazu, mitteilen?

Gruß an alle

inesa394

Hallo

Das Modul abändern wie folgt
In IPCAM Zeile 380 unter
$timestamp =~ s/(:|-)//g;
$snapshot = GetFileFromURLQuiet($camURI);
dies zusätzlich einfügen
$snapshot="http://$camAuth/".substr($snapshot,12,74);
Log 1, "IPCAM $name SnapshotNeu: $snapshot";
$snapshot = GetFileFromURLQuiet($snapshot);


Definiert ist das Modul so
define hootoocam IPCAM 192.168.178.49:1024
attr hootoocam path cgi-bin/hi3510/param.cgi?cmd=snap&
attr hootoocam room Status
attr hootoocam storage ./www/snapshots
attr hootoocam icon it_camera
attr hootoocam event-on-change-reading snapshots

bei mir

holzwurm83

Zitat von: coh3r3nt am 28 April 2016, 16:02:46
Hallo zusammen,

bie mir läuft die Edimax IC-3115W mit dem Modul.


define IC3115W IPCAM 192.x.x.x
attr IC3115W basicauth user:geheim
attr IC3115W path snapshot.jpg



Wer eine andere Edimax-Cam hat, kann sich den paramter für path hier raussuchen: https://www.ispyconnect.com/man.aspx?n=Edimax raussuchen.

Ich hätte auch noch einen Wunsch für das Modul. Könnte man als Kommando auch das Bild (get IC3115W image) machen lassen, zB.:

attr IC3115W webCmd image


So könnte man im Frontend das speichern eines Bildes antriggern durch klick auf das webCmd.

greets,
coh3r3nt

Hallo zusammen,

ich versuche gerade wie oben beschrieben meine Edimax IC-9110w zu implementieren. Allerdings schmiert mir dann immer mein Fhem ab und im Log steht die folgende Meldung.

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

Ich habe aus dem Link oben beide Path Einstellungen probiert. Immer mit dem gleichen Problem.
attr path mjpg/video.mjpg
attr path mjpg/1/video.mjpg

Habe das auch schon so versucht zu definieren:

define CamGarten IPCAM user:passwort@192.x.x.x


Könnt ihr mir hierbei weiter helfen?
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Brockmann

Zitat von: holzwurm83 am 05 April 2018, 10:17:03
Könnt ihr mir hierbei weiter helfen?
Für IPCAM benötigst Du Snapshots, also Einzelbildaufnahmen (PEG, PNG, GIF, TIFF, BMP, ICO, PPM, XPM, XBM oder SVG).
MJPG ist ein Videoformat, damit kann IPCAM nichts anfangen.

Du müsstest einen Link finden, unter dem Du jeweils ein Einzelbild Deiner Kamera abrufen kannst.