Die letzen xx Bilder anzeigen.

Begonnen von HoTi, 22 Februar 2016, 12:51:19

Vorheriges Thema - Nächstes Thema

HoTi

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.
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

marvin78

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);
}



HoTi

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.
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

Wzut

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
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HoTi

Jiiipiiii ein fettes DANKE!!!!!  :D :D :D :D :D

Das habe ich gebraucht!
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

Wzut

#5
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>";
}
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

wbini

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

Michael

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.  :'(
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

Michael

#8
@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 &nbsp; $imgt
</table></td></tr></table>";
}

1;


Ja, den Code habe ich verfuscht, bitte nur schmunzel.  ::)
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

Wzut

#9
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>";
}

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Michael

#10
Danke schön !!!

PS.
Irgendwie stimmt da die Reihenfolge nicht.  ???
Die Bilder passen aber zum Datum und Uhrzeit.
s.h. Anhang
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

Wzut

#11
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
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Andre0909

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

eszych

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!
Raspberry Pi 2 - FHEM 5.7
HM-LAN, HM-CFG-USB-2
HM-Sec-SCo, HM-Sec-SC-2, HM-TC-IT-WM-W-EU,
HM-LC-SW4-DR, HM-LC-Sw1-DR, HM-ES-PMSw1-DR,    
HM-ES-PMSw1-Pl - Rademacher Hompilot DuoFern

DS_Starter

#14
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
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter