ImageGrabber - Bild speichern

Hallo zusammen,

bis gestern zum Update auf die aktuelle Beta 4.0 hat mein ImageGrabber Skript problemlos funktioniert.
Doch nun wird das Bild im Cams Ordner nicht mehr aktualisiert. Gibt es hierzu irgendwas zu beachten?

Folgend das Skript:

<?

//file_get_contents("http://root:quattro@192.168.1.100/cgi-bin/admin/setvi.cgi?vi0=1(200)0");
//IG_UpdateImage(20952 /*[Kamera\Image Grabber_Haustür]*/ );


// Bild für aktuelle Position sichern
IG_UpdateImage(20952 /*[Kamera\Image Grabber_Haustür]*/ );
$sek=date('s',time());
$min=date('i',time());
$std=date('H',time());
$day=date('d',time());
$month=date('m',time());
$year=date('Y',time());

$name=$year.$month.$day.'_'.$std.$min.$sek;

$name = $name.".jpg";

// Ab Version 4.0
//print_r(IPS_GetMedia(48661 /*[Kamera\Image Grabber_Haustür\Image]*/));


copy("C:/IP-Symcon/Cams/20952.jpg","C:/IP-Symcon/Cams/1/History/".$name);

//copy("C:/IP-Symcon/Cams/20952.jpg","C:/IP-Symcon/Cams/1/History/"."tesT");

//Schnappschuss
//file_get_contents("http://root:quattro@192.168.1.100/cgi-bin/viewer/video.jpg");
//file_get_contents("http://192.168.1.100:554/cgi-bin/viewer/video.jpg?channel=[1]&resolution=[1200]x[1200]");

?>

Danke für die Hilfe!

Daniel

Ist schon ein paar Version länger aktiv.
Hast du welche übersprungen?
IPS_SetMediaCached — IP-Symcon :: Automatisierungssoftware

Mit false auf das MediaObjekt anwenden.
Sonst bleibt das Bild nur im RAM und nicht auf der Festplatte.
Oder:
Anstatt die Datei direkt zu kopieren, mit GetMediaContent das Bild aus dem RAM holen und dann weg speichern.

https://www.symcon.de/service/dokumentation/befehlsreferenz/medienverwaltung/ips-getmediacontent/
Michael

Hallo Michael,

steh gerade etwas auf dem Schlauch. Wie kann ich die von dir beschriebenen Funktionen denn dann nutzen, um das Bild vom ImageGrabber auf meine Festplatte zu speichern?

Den Image Grabber brauch ich aber noch, oder???

Danke für die Hilfe!

Dan

Direkt gar nicht…Hast du die Beschreibung von IPS_SetMediaCached gelesen ?
Du hast unterhalb des ImageGrabber ein MediaObjekt mit deinem Bild.

Alle neuen MdeiaObjekte werden erstmal mit aktiven Cache erstellt, so auch Dieses.

Dadurch ändert sich die Datei auf der Festplatte nur noch beim runterfahren vom Dienst.
Sonst wird das Bild nur im RAM gehalten.

Also mußt du, wenn du das Bild noch woanders hin kopieren möchtest:

[ul]
[li]Das Caching mit IPS_SetMediaCached(<ID vom MediaObjekt, false); abschalten[/li][li]Und dann funktioniert auch dein Script wieder.[/li][/ul]

Oder:

[ul]
[li]IPS_GetMediaContent(<ID vom MediaObjekt>) die Daten direkt aus dem MediaObjekt holen[/li][li]Dann mit base64_decode dekodieren[/li][li]Und dann mit file_put_contents abspeichern.[/li][/ul]

Michael

Am besten die zweite Option nutzen, da das Caching bei jedem Aktualisieren eh wieder aktiviert wird :wink:

paresy

Na dass ist ja gemein von dem ImageGrabber :eek:

Michael

Hallo Michael,

dank deiner Hilfe funktioniert es jetzt wieder.
Die Lösung schaut so aus:

<?

//Zeitstempel für Bild erstellen
$sek=date('s',time());
$min=date('i',time());
$std=date('H',time());
$day=date('d',time());
$month=date('m',time());
$year=date('Y',time());

$name=$year.$month.$day.'_'.$std.$min.$sek;

$name = $name.".jpg";

// Bild aktualisieren
IG_UpdateImage(20498 /*[Kamera\Image Grabber (WebCams)]*/ );

//IPS_SetMediaCached(20498 /*[Kamera\Image Grabber (WebCams)]*/, false);

$MediaID = 48480 /*[Kamera\Image Grabber (WebCams)\Image]*/;

$Inhalt = base64_decode(IPS_GetMediaContent($MediaID));

$Lokale_BildDatei = IPS_GetKernelDir()."\\cams\\1\\History\\".$name;  // z.B.  C:\IP-Symcon\media	estbild.png

// Bild in Datei speichern
file_put_contents($Lokale_BildDatei, $Inhalt);

?>

Schöne Grüße
Dan

Bitteschön :smiley:

Bin da letztens auch drauf reingefallen, aber bei einem einzelnen MediaObjekt.

Michael

Hallo Leute,

ich habe es noch nicht verstanden…

Auch ich habe zwei Webcams die via ImageGrabber den Stream im Webfront anzeigen. Muss ich für die "speicherschonende Variante " etwas verändern?

Joachim

Nö, nur wenn du die Bilder als Datei ablegen willst.

Okay, danke für die schnelle Antwort!:slight_smile:

Joachim

Hallo zusammen,
das Scriptbeisspiel habe ich auch eingesetzt es funktionier auf meinem raspi prima.

Ich möchte das Bild per Mai verschicken und habe folgenden code:


...
$Lokale_BildDatei = "/media/nas-backup/raspberrypi".$name;

// Bild in Datei speichern
file_put_contents($Lokale_BildDatei, $Inhalt);
SMTP_SendMailAttachmentEx(40448 /*[E-Mail, Send (SMTP)]*/,"exaple@mail.de", "Es hat geklingelt", "Im Anhang ist ein Bild!", "media/nas-backup/raspberrypi".$name);

Das geht ganz gut, aber muss ich das Bild erst abspeichern um es zu versenden??

Anders habe ich es nicht geschafft.
Kann jemand helfen?

Gruß
Werner

Ich hab mir mal notiert, dass wir da vielleicht die Funktion erweitern, sodass man entweder direkt ein Media Objekt verwenden kann, oder beliebige Inhalt als Anhang senden kann.

paresy

Super paresy,
das wäre toll, hilft bestimmt nicht nur mir! :loveips:

LG
duk64

Hallo,

ich wäre auch stark daran interessiert, die Bilder meiner Cams direkt per Mail verschicken zu können, ohne sie erst noch einmal in einer Datei abspeichern zu müssen.

Kann ich mit einer solchen Funktion rechnen oder muss ich den Umweg über das Speichern gehen?

Viele Grüße aus Jena

Frank

PS: Super wäre natürlich dann auch, wenn man mehrere Bilder in einer Mail versenden könnte.:slight_smile:

Ja, das wäre gut. Seit dem Update auf 4.0 werden keine Bilder bei Bewegung mit den alten Scripten mehr vermailt. Hatte ich jedoch erst erwas später bemerkt. Gehe nun auch über den ImageGrabber, den hatte ich noch gar nicht entdeckt. Macht aber einen guten Eindruck.

Kann man die Bilder auch außerhalb von „C:\IP-Symcon“ speichern, z.B. auf einem NAS? Ist mir bisher nicht gelungen. Mit copy ginge das wohl, allerdings muss das NAS permanent mit einem Laufwerksbuchstaben eingehängt haben, oder?

Gibt es da schon etwas Neues?

Medien Objekte gehen schon:
SMTP_SendMailMedia — IP-Symcon :: Automatisierungssoftware
Wobei ich die Version in der Doku (2.2) gerade mal anzweifeln würde.
Michael

Diese Geschichte ist der einzige Grund weshalb ich noch nicht auf 4.0 bzw. sogar 4.1 gewechselt bin.

Bisher konnte ich von meinen Überwachungskameras ohne Probleme Snapshots per Mail senden lassen.

Das geht ja in 4.0 leider nicht mehr so einfach.

Deshalb habe ich das o.g. Skript genommen:

 <?

//Zeitstempel für Bild erstellen
$sek=date('s',time());
$min=date('i',time());
$std=date('H',time());
$day=date('d',time());
$month=date('m',time());
$year=date('Y',time());

$name=$year.$month.$day.'_'.$std.$min.$sek;

$name = $name.".jpg";

// Bild aktualisieren
IG_UpdateImage(53092 /*[Skripte\Kamera\Snapshot\Briefkasten\Image Grabber (WebCams)]*/ );

//IPS_SetMediaCached(20498 /*[Objekt #20498 existiert nicht]*/, false);

$MediaID = 10197 /*[Skripte\Kamera\Snapshot\Briefkasten\Image Grabber (WebCams)\Image]*/;

$Inhalt = base64_decode(IPS_GetMediaContent($MediaID));

$Lokale_BildDatei = IPS_GetKernelDir()."\\cameras\\briefkasten\\history\\".$name;  // z.B.  C:\IP-Symcon\media	estbild.png

// Bild in Datei speichern
file_put_contents($Lokale_BildDatei, $Inhalt);

?>

Das Speichern funktioniert.

Nun würde ich aber gerne einen aktuellen Snapshot der Kameras mit 4.0 / 4.1 versenden.

Wie müsste ich das dann machen? Würde nämlich gerne auf 4.1 gehen :loveips:

@NallChan: Ticket für Pio ist gemacht :slight_smile:
@dpoessel: Die Funktion oben sollte genau dies tun :slight_smile:

paresy