Hallo zusammen,
ich lege bei einer Bewegung immer im Verzeichniss "/opt/fhem/www/snapshots" ein neues Bild ab. (Inkl. Datumsstempel)
Ich würde jetzt gerne im Fhem die neusten 6 Bilder anzeigen lassen. Hat das jemand schon gemacht und kann mir ein Tipp geben wie ich das "Problem" lösen kann?!
Ich lösche die alten Bilder nur einmal im Monat. Sollange sollen sie auch aufbewahrt werden.
Ich habe mir dafür 98_weblink der Art umgebaut, dass es auch Perl Code als Pfad für ein Image annimmt.
Zeile 104 ff.:
} elsif($wltype eq "image") {
$link = AnalyzePerlCommand(undef, $link) if($link =~ m/^{(.*)}$/);
$ret = "<img src=\"$link\" $attr><br>" .
weblink_FwDetail($d);
Vorsichtig. Das ist natürlich nicht update-sicher. Ich würde weblink dann vom update aussschließen.
Als Link wird dann sowas im DEF hinterlegt:
image {returnPicPath("CAMNAME","snapshot1")}
Und eine sub in der myUtils:
sub returnPicPath($$) {
my ($dev,$reading)=@_;
return "./fhem/www/snapshots/".$dev."/".ReadingsVal($dev,$reading,0);
}
Ich habe es versucht zu verstehen und nachzubauen und bin gescheiter :'(
Bei mir wird FHEM sogar eine Zeit lang Blockiert bis ich wieder was machen kann.
Ich würde die 98_weblink in Ruhe lassen und so nutzen wie sie ist.
Und wenn dann sowieso noch etwas in die 99_myUtils muss, dann kann man auch gleich alles in die eigene Funktion packen :)
@RettungsTim, erweitere dir die 99_myUtils.pm um die folgende sub :
sub last_six_pics($$)
{
my ($w,$h) = @_;
my ($s, $i, $j);
for ($i=1; $i<7; $i++)
{
$j = $i."p";
$s .= "<tr><td><img src='/fhem/";
$s .= qx(ls -1t ./www/snapshots/* | sed -n $j);
$s .= "' width='$w' height='$h'></td></tr>";
}
return "<table>".$s."</table>";
}
dann lege dir einen weblink zum anzeigen an :
define six_pics weblink htmlCode { last_six_pics(300,200)}
ersetze ggf. die 300,200 ( Breite x Höhe ) durch andere Werte dir besser gefallen
Jiiipiiii ein fettes DANKE!!!!! :D :D :D :D :D
Das habe ich gebraucht!
nachdem ich das gestern gesposted hatte habe ich es auch bei mir im aktuellen System eingebaut. Allerdings hat mir :
a. die lange Tapete nicht gefallen
und
b. wollte ich etwas flexibler sein was die Anzahl der Bilder angeht.
Ergebnis ist eine neue Version die noch zwei Parameter mehr hat :
Anzahl der Spalten(x) , Anzahl der Zeilen(y) , Breite, Höhe
Der Weblink ändert sich somit etwas
(Bsp. 9 Bilder in drei Zeilen und drei Spalten, jedes Bildchen in 240x180px, mit Link zum Anklicken und Ansicht im Vollbildmodus) :
define last_pics weblink htmlCode { last_pics(3,3,240,180)}
die geänderte,neue Funktion :
sub last_pics($$$$)
{
my ($col,$row,$w,$h) = @_;
my ($s, $ss, $i, $j, $p, $img);
for ($i=1; $i<=$row; $i++)
{
$s .= ($i%2) ? "<tr class='even'>" : "<tr class='odd'>";
for ($j=1; $j<=$col; $j++)
{
$p++;
$ss = "'".$p."p'";
$s .= "<td><div class='col$j'>";
$img = qx(ls -1t www/snapshots/* | sed -n $ss);
$img =~s/\n//g;
if (!$img)
{ $s .= "<img src='/fhem/images/default/icoBlitz.png' alt='pic_$p' title='no image' />"; }
else
{ $s .= "<a href='/fhem/$img'><img src='/fhem/$img' width='$w' height='$h' alt='pic_$p' /></a>";}
$s .= "</div></td>\n";
}
$s .= "</tr>\n";
}
return
"<table class='roomoverview'>
<tr><td><div class='devType'>Last Pics</div></td></tr>
<tr><td>
<table class='block wide'>
$s
</table></td></tr></table>";
}
Hallo,
habe das Skript am Laufen und es tut das, was es soll.
Jetzt wollte ich den Pfad der Bilder von www/snapshots/* in /tmp/* (Ramdisk) umbiegen, leider funktioniert das so nicht. Bilder werden nicht angezeigt - Link ist vorhanden.
Gibt´s denn eine Möglichkein Bilder außerhalb des www/-Verzeichnisses über weblink anzeigen zu lassen?
Gruß,
wbini
Moin Wzut
Habe deine Script vom 24 Februar 2016, 14:38:53 entdecket und muss Danke sagen. :)
Habe nur die Zeile ( $img = qx(ls -1t www/snapshots/* | sed -n $ss); ) geändert
in ( $img = qx(ls -1t www/snapshots/*_*_* | sed -n $ss); ) da bei mir immer zwei mal das selbe
Bild dabei war. (IpCam_snapshot/IpCam_20161202_083505)
Eine Frage habe ich aber noch.
Ist es möglich den Datumsstempel mit Anzeigen zu lassen.
Bin leider nicht fit das selber lösen zu können. :'(
@all
Kann mir jemand Helfen. :-[
Habe keine Ahnung vom Programmieren.
Ich wollte das Datum und die Uhrzeit eigendlich ins Bild bekommen
da runter habe ich geschaft, leider aber auch nur unten einem Bild.
Habe den Code so abgeändert:
##########################################################################################################################
# $Id: 99_myUtils_IpCamPic.pm 0011 2016-12-03 00:00:00Z $
#
package main;
use strict;
use warnings;
use POSIX;
use Date::Calc qw(:all);
sub
myUtils_IpCamPic_Initialize($$)
{
my ($hash) = @_;
}
sub last_pics($$$$)
{
my ($col,$row,$w,$h) = @_;
my ($s, $ss, $i, $j, $p, $img);
my ($imgd, $imgJJJJ, $imgMM, $imgTT); #Datum
my ($imgt, $imgHH, $imgMMM); #Uhrzeit
for ($i=1; $i<=$row; $i++)
{
$s .= ($i%2) ? "<tr class='even'>" : "<tr class='odd'>";
for ($j=1; $j<=$col; $j++)
{
$p++;
$ss = "'".$p."p'";
$s .= "<td><div class='col$j'>";
$img = qx(ls -1t www/snapshots/*_*_* | sed -n $ss);
#Erstell Datum umstellen
$imgd = substr(qx(ls -1t -m www/snapshots/*_*_*),20,8);
$imgJJJJ = substr($imgd,0,4);
$imgMM = substr($imgd,4,2);
$imgTT = substr($imgd,6,2);
$imgd = "<td><div class='col$j'>";
$imgd = "$imgTT.$imgMM.$imgJJJJ";
#Erstell Uhrzeit umstellen
$imgt = substr(qx(ls -1t -m www/snapshots/*_*_*),29,6);
$imgHH = substr($imgt,0,2);
$imgMMM = substr($imgt,2,2);
$imgt = "<td><div class='col$j'>";
$imgt = "$imgHH:$imgMMM";
$img =~s/\n//g;
if (!$img)
{ $s .= "<img src='/fhem/images/default/icoBlitz.png' alt='pic_$p' title='no image' />";}
else
{ $s .= "<a href='/fhem/$img'><img src='/fhem/$img' width='$w' height='$h' alt='pic_$p' /></a>";}
$s .= "</div></td>\n";
}
}
return
"<table class='roomoverview'>
<tr><td>
<table class=''>
$s
<tr><td>
$imgd $imgt
</table></td></tr></table>";
}
1;
Ja, den Code habe ich verfuscht, bitte nur schmunzel. ::)
Ich habe die Funktion immer noch selbst im Einsatz, allerdings hatte ich sie inzwischen um einen weiteren Aufruf Parameter erweitert (Datei Endung)
da ich verschiedene Übersichten brauchte.
Beispiel :
define last_pics weblink htmlCode { last_pics(3,3,240,180,'jpg')}
Hier meine Version mit Datum und Zeit im typischen fhem Format (%Y-%m-%d %H:%M:%S) unter jedem Bild :
sub last_pics($$$$$)
{
my ($col,$row,$w,$h,$ext) = @_;
my ($s, $ss, $i, $j, $p, $img);
for ($i=1; $i<=$row; $i++)
{
$s .= ($i%2) ? "<tr class='even'>" : "<tr class='odd'>";
for ($j=1; $j<=$col; $j++)
{
$p++;
$ss = "'".$p."p'";
$s .= "<td align='center'><div class='col$j'>";
$img = qx(ls -1l --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.$ext | sed -n $ss | cut -d " " -f6,7,8);
$img =~s/\n//g;
if (!$img)
{ $s .= "<img src='/fhem/images/default/icoBlitz.png' alt='pic_$p' title='no image' />"; }
else
{
my @arr = split(" ",$img);
$s .= "<a href='/fhem/$arr[2]'><img src='/fhem/$arr[2]' width='$w' height='$h' title='$arr[0] $arr[1]' /></a>";
$s .= "<br>".$arr[0]." ".$arr[1];
}
$s .= "</div></td>\n";
}
$s .= "</tr>\n";
}
return
"<table class='roomoverview'>
<tr><td><div class='devType'>Last Pics</div></td></tr>
<tr><td>
<table class='block wide'>
$s
</table></td></tr></table>";
}
Danke schön !!!
PS.
Irgendwie stimmt da die Reihenfolge nicht. ???
Die Bilder passen aber zum Datum und Uhrzeit.
s.h. Anhang
dann versuch halt mal statt nur l
$img = qx(ls -1l
ein zusätzliches t anzuhängen ( sort by modification time, newest first -> siehe man ls )
$img = qx(ls -1lt
Hallo zusammen,
irgendwie steh ich auf dem Schlauch. Grundsätzlich finde ich die Grundidee hier super aber
wenn ich das richtig verstehe ist die Lösung definitiv nur über Snapshots möglich die auch auf dem RASP gespeichert werden und nicht z.b auf der Synology richtig?
Wenn ja, wie bekommt ihr den Snaps in den RASP ordner. Das Modul SSCam legt ja auch nur auf der Synology ab und/oder wie kann
ich evtl auf den Synology ordner zugreifen.
Bin verwirrt. Würde nämlich gerne das beim Klingeln (wird durch die Fritzbox getriggert) 1-3 Snaps ausgelöst werden, die ich dann angezeigt bekomme um später zu sehen wer denn vor der Tür stand...
Danke für eure Hilfe
Hallo Andre0909,
schau mal unter https://wiki.fhem.de/wiki/SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#L.C3.B6sungsbeispiele_und_Ans.C3.A4tze_f.C3.BCr_verschiedene_Aufgabenstellungen nach.
Da steht wie man das Synology Verzeichnis per NFS Mount auf dem Raspberry einhängt. Dann klappt es auch mit den Bildern ;)
Viel Erfolg!
Hallo zusammen,
SSCam-Benutzer haben mit der aktuellen Version die Möglichkeit eine Schnappschußgalerie per Tastendruck mit:
set <name> createSnapGallery
zu erzeugen. Dazu braucht man keine Mounts mehr zu setzen u.dgl.
Die Anzahl der (letzten) darzustellenden Snaps kann eingestellt werden, genauso wie die Darstellung (Größe, Anzahl von Spalten, usw.).
Für die dynamische, oder temporäre Anzeige gibt es auch:
set <name> snapGallery [1-10] oder
get <name> snapGallery [1-10]
Dazu gehören dann einen Reihe von Attributen (beginnend mit snap...) zur Anzeigeeinstellung.
Alle genannten Funktionen arbeiten direkt interaktiv mit der Surveillance Station und man kann die Snapschüsse auf der Syno in den dafür vorgesehenen Verzeichnissen belassen.
@Andre0909 ...
ZitatBin verwirrt. Würde nämlich gerne das beim Klingeln (wird durch die Fritzbox getriggert) 1-3 Snaps ausgelöst werden, die ich dann angezeigt bekomme um später zu sehen wer denn vor der Tür stand...
Sowas geht damit ganz einfach, z.B.:
define N.CamTER.GalOpen notify CamTER:LastSnapFilename:.* get CamTER snapGallery 3
Im Ergebnis bekommst du ein Popup wie im Anhang zu sehen.
Grüße
Heiko
Zitat von: Andre0909 am 04 Januar 2017, 17:47:13
Hallo zusammen,
irgendwie steh ich auf dem Schlauch. Grundsätzlich finde ich die Grundidee hier super aber
wenn ich das richtig verstehe ist die Lösung definitiv nur über Snapshots möglich die auch auf dem RASP gespeichert werden und nicht z.b auf der Synology richtig?
Wenn ja, wie bekommt ihr den Snaps in den RASP ordner. Das Modul SSCam legt ja auch nur auf der Synology ab und/oder wie kann
ich evtl auf den Synology ordner zugreifen.
Bin verwirrt. Würde nämlich gerne das beim Klingeln (wird durch die Fritzbox getriggert) 1-3 Snaps ausgelöst werden, die ich dann angezeigt bekomme um später zu sehen wer denn vor der Tür stand...
Danke für eure Hilfe
Was ist denn deine Frage ? Du hast nur zitiert.
Guten Tag,
ich habe dieses Projekt beim mir getestet und es funktioniert, dafür möchte ich mich bedanken.
Da ich auch kein großer Programmierer bin möchte ich um eine Hilfe bitten.
Ich speichere von meiner Kamera bei jeder Bewegung ein Bild in einem Ordner mit dem aktuellen Datum z.B (2018_02_13)
wie kann ich das Datum automatisch im Pfad einfügen.
Wie unten angeführt.
$img = qx(ls -1lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshot/2018_02_13/*.$ext | sed -n $ss | cut -d " " -f6,7,8);
Ich würde mich über eine Hilfe freuen, denn ich habe es nicht geschafft.
Danke
Bobo
Hi Bobo,
Coding bitte in code tags (das # über den Smilies). Es gab kürzlich hier im Anfängerforum einen Thread zu genau dem Thema. Such mal ein bisschen. Wenn du nicht weiter kommst melde dich nochmal. Lies vielleicht auch mal in der Commandref unter Perl Specials nach...
Kurz, weil mobil...
Hi KernSani,
danke erst mal für deine Antwort, ich habe alles gelesen wie du mich geraten hast.
Ich habe versucht die halbe Nacht weiter zu kommen aber kein Erfolg.
War imstande das Datum auszulesen und in eine Variable und auch den Pfad in eine Variable zu schreiben, wie man im Bild erkennen kann.
Komme aber mit meinem Latein nicht weiter, wenn du mir helfen könntest wäre ich sehr dankbar.
Ich möchte die variable pfad unten einfügen, bekomme aber die Bilder nicht angezeigt.
$datum=`date +'%Y_%m_%d'`;]
$pfad = "www/snapshot/" . "$datum" . "/*.";]
$img = qx(ls -1l --time-style='+%Y-%m-%d %H:%M:%S' www/snapshot/*.$ext | sed -n $ss | cut -d " " -f6,7,8);
Guten Tag,
ich hab es selbst selbst gelöst.
Danke
Zitat von: bobo am 19 Februar 2018, 08:10:30
Guten Tag,
ich hab es selbst selbst gelöst.
Danke
und die lösung möchtest du für dich behalten?
Hallo Nils,
natürlich kann ich das zeigen, habe nur nicht dran gedacht und ich bin auch kein Programmiere es ist vielleicht nur eine
Bastlerei.
Ich habe aber noch das Problem, dass nur die ersten Bilder vom Tag angezeigt werden und nicht die Letzten
my ($s, $ss, $i, $j, $p, $img, $datum, $pfad);
$datum=`date +'%Y_%m_%d'`;
chop $datum;
$pfad = "www/snapshot/$datum/*.$ext";
$img = qx(ls -1lt --time-style='+%Y-%m-%d %H:%M:%S' $pfad | sed -n $ss | cut -d " " -f6,7,8);
Sehr schöner Codeschnipsel - Vielen Dank dafür!
Mich hatte noch gestört dass das neueste Bild immer doppelt angezeigt wird.
Es ist ja auch doppelt vorhanden: Einmal mit Namensschema gleich allen weiteren Bildern und einmal als *snapshot.jpg.
Um das *snapshot.jpg auszublenden habe ich die Zeile:
$img = qx(ls -1l --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.$ext | sed -n $ss | cut -d " " -f6,7,8);
geändert in:
$img = qx(ls -1l --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*[0-9].$ext | sed -n $ss | cut -d " " -f6,7,8);
Edit: Durch das Hochladen von Snapshots zum FTP- Server durch die Kamera selbst (Bewegungserkennung) haben sich noch teilweise
doppelte Leerzeichen eingeschlichen. Um die zu entfernen sieht die Zeile nun so aus:
$img = qx(ls -1lt --time-style='+%Y-%m-%d %H:%M:%S' www/images/Snapshots/*[0-9].$ext | sed -e 's/ */ /g' | sed -n $ss | cut -d " " -f6,7,8 );
Gruß
Frank
Finde den Codeschnipsel auch prima.
Nur ne Verständnisfrage: Warum lässt sich kein Bild aus einem anderen Verzeichnis als fhem/www/..... darstellen ? Liegt das daran, dass der Webserver FHEMWEB nur auf dieses und dessen Unterverzeichnisse zugreifen darf ?
Grüße Markus
ja , aber das Problem mit externen Quellen ist auch lösbar
a. wenn die externe Quelle Netzwerk Freigaben unterstützt (nfs , samba): das als mount fhem/www unterschieben
b. wenn die externe Quelle einen eignen Webserver hat : den Code Schnippel dort in ein cgi Script packen und den FHEM weblink darauf zeigen lassen
Zitat von: KölnSolar am 04 September 2019, 11:40:21
Finde den Codeschnipsel auch prima.
Nur ne Verständnisfrage: Warum lässt sich kein Bild aus einem anderen Verzeichnis als fhem/www/..... darstellen ? Liegt das daran, dass der Webserver FHEMWEB nur auf dieses und dessen Unterverzeichnisse zugreifen darf ?
Grüße Markus
Ja, das ist das "root" Verzeichnis vom Fhemweb Webserver. Man kann aber symbolische Links erstellen.