FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: Andre0909 am 14 Januar 2017, 18:19:15

Titel: Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 14 Januar 2017, 18:19:15
Hallo zusammen,

ich speicherer beim klingeln Screenshots von meiner Kamera (3 pro Klingeln) und möchte nun in einer Tabelle neben dem Datum des Klingelns (welches ich über die FB_Calllist bekomme) jeweils die 3 Fotos dazu anzeigen.

Dazu müsste ein Script das Vezeichnis durchsuchen und die Fotos zur Verfügung stellen. Sowas ähnliches wurde bereits in folgendem Thread behandelt: https://forum.fhem.de/index.php/topic,49732.0.html

Allerdings funktioniert dort die Anzeige nur iper Weblink in der FHEM-Oberfläche.

Der Scripterfinder hat leider keine Ahnung von Tablet UI, daher hoffe ich hier eine gute Idee zu bekommen.

Das Problem ist, dass die SCreenshots von IPCAM mit Timestamps versehen werden, also es immer um andere Dateinamen geht. Anbei der Ausschnitt aus dem anderen Thread:

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

und weblink:

define last_pics weblink htmlCode { last_pics(3,3,240,180,'jpg')}

Es muss doch irgendeine Möglichkeit geben diese Screens einzublenden :/ HILFE!!
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 14 Januar 2017, 20:00:03
Du müsstest das Script soweit anpassen, dass du alle HTML Tags entfernst "<ABC>" und dann die reine URL als Output in ein UserRerading schreibst. Dann kannst du dieses URL Reading als Input für das Image Widget benutzen. Aber immer nur eine URL pro Reading.

Oder du nimmst den ganzen Output inkl. HTML Tags in ein UserReading und benutzt ein Label-Widget, der die Tabelle dann anzeigt.
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 15 Januar 2017, 11:11:22
Zitat von: setstate am 14 Januar 2017, 20:00:03
Du müsstest das Script soweit anpassen, dass du alle HTML Tags entfernst "<ABC>" und dann die reine URL als Output in ein UserRerading schreibst. Dann kannst du dieses URL Reading als Input für das Image Widget benutzen. Aber immer nur eine URL pro Reading.

Oder du nimmst den ganzen Output inkl. HTML Tags in ein UserReading und benutzt ein Label-Widget, der die Tabelle dann anzeigt.

Hallo setstate und mal wieder Danke für die Infos. Ich denke der 2. Vorschlag ist wahrscheinlich einfacher? Vielleicht kannst du mir noch ein stupser geben wie genau ich das umsetze. Irgenwie fehlt mir die Verbindung zu dieser sub und dann der weiterverarbeitung wie du es vorgeschlagen hast.

Der 1. Vorschlag scheint jedoch der saubere zu sein. Ich habe nur leider keine Ahnung was ich da genau anpassen muss. Auch hiezu nehme ich gerne noch ein wenig input. Hab leider von dem Code da wenig Ahnung :(

Danke :)
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 15 Januar 2017, 13:43:39
Du muss eigentlich nur den Kern des Scripts nutzen -> das 'ls -lt' nach Zeit sortierten Auflisten der Bilder

Name letztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '1p' | cut -d " " -f8);

Zeit letztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '1p' | cut -d " " -f6-7);

Name vorletztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '2p' | cut -d " " -f8);

Zeit vorletztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '2p' | cut -d " " -f6-7);

Alles ungetestet ....
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 15 Januar 2017, 15:14:52
Zitat von: setstate am 15 Januar 2017, 13:43:39
Du muss eigentlich nur den Kern des Scripts nutzen -> das 'ls -lt' nach Zeit sortierten Auflisten der Bilder

Name letztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '1p' | cut -d " " -f8);

Zeit letztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '1p' | cut -d " " -f6-7);

Name vorletztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '2p' | cut -d " " -f8);

Zeit vorletztes neustes Bild
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '2p' | cut -d " " -f6-7);

Alles ungetestet ....

Okay, das habe ich soweit verstanden, da der Rest ja wohl nur dafür da ist, die "Tabelle" zu bauen. Wenn ich das richtig verstehe müsste ich also z.b. für 9 Fotos 9 mal eine sub 1..9 bauen und diese jeweils mit:

return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '1-9p' | cut -d " " -f8);

füllen. Wenn das so richtig ist verstehe ich nur noch nicht den Zusammenhang zum Einbau ins FTUI. Die sub 1 sollte mir ja dann das entsprechende Foto 1 liefern, aber in welcher Form? Als link? Wie binde ich das dann ins Image Widget ein. Sorry ich hab schon echt viel gemacht aber der eigen programmierbare Perl-Teil ist echt meine schwäche.

---------------------

sub last_pics1($$$$$)

return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n '1p' | cut -d " " -f8);

Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 15 Januar 2017, 15:40:15
Perl ist auch nicht meine Lieblingssprache. Vor lauter $ Zeichen sieht man manchmal den Code nicht mehr  ;)

Nicht für jedes Bild ein sub. Du kannst doch Aufrufsparameter benutzen.


sub last_pics($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n $ss | cut -d " " -f8);



Aufruf dann mit {  last_pics(1); }
Wenn es funktioniert, kann man das kann man dann auch als UserReadings bei attr einfügen.

Alles ungetestet !!!
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 15 Januar 2017, 16:12:35
Zitat von: setstate am 15 Januar 2017, 15:40:15
Perl ist auch nicht meine Lieblingssprache. Vor lauter $ Zeichen sieht man manchmal den Code nicht mehr  ;)

Nicht für jedes Bild ein sub. Du kannst doch Aufrufsparameter benutzen.


sub last_pics($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/*.png | sed -n $ss | cut -d " " -f8);



Aufruf dann mit {  last_pics(1); }
Wenn es funktioniert, kann man das kann man dann auch als UserReadings bei attr einfügen.

Alles ungetestet !!!

Danke erstmal für deine Mühe. Habe jetzt folgendes in die 99 gesetzt:

sub last_pics($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
return qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/snapshots/cam1/*.jpg | sed -n $ss | cut -d " " -f8);
}


Dazu habe ich ein Dummy erstellt und dieses mit Attr User Reading reading1 {  last_pics(1); }

Ic weiß nicht ob ich was vergessen habe, aber es passiert nüx :/







Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 17 Januar 2017, 13:50:21
Hast du hier evtl noch einen Tipp für mich setstate? Ich denke die Lösung ist nah :/
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 17 Januar 2017, 14:15:43
Was passiert denn, wenn du {  last_pics(1); } in der Fhem Eingabe sendest?
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 17 Januar 2017, 14:43:39
Also irgendwie bin ich zu doof. du meinst die ganz normale Eingabezeile? Dann kommt entweder unknown command "{" oder wenn ich das ohne Klammern eingebe unknown command Last_pics  :-\
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Markus Bloch am 18 Januar 2017, 11:17:43
Da du ein Semikolon im Befehl verwendest der nicht maskiert ist, trennt FHEM den Befehl an dieser Stelle auf, was natürlich nicht Sinn dieses Befehls ist. Entweder das Semikolon maskieren oder ganz weglassen:

{last_pics(1)}
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 18 Januar 2017, 19:13:51
Super Danke...also ein Schritt weiter...

Wenn ich das ganze in die Kommandozeile eingebe kommt als Response "15:54:23".
Das ist genau die Uhrzeit des letzten Screenshots. So weit so gut denke ich...

Was jetzt noch nicht klappt, wie ich das ganze mit einem Dummy und entsprechenden Reading Versehe damit ich im Image widget genau den Screen anzeigen lassen kann. Das würde dann ja auch analog zu screen 2,3,4,5.... funktionieren.

Ich habe eine Dummy angelegt mit dem Attr UserReading und da im Fenster (nicht der CFG) eingegeben:


reading1 {  last_pics(1); }
reading1 {  last_pics(1);; }
reading1 {  last_pics(1) }


Also jede Variante einmal ausprobiert. Führt leider noch zu keinem Erfolg... Habe mir ach nochmal alles zu Userreadings durchgelesen da ich die eigentlich nicht nutze. Syntax müsste doch eigentlich stimmen. Aber wie komme ich nu ans Bild?

Danke für die geduldige Hilfe!!
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 20 Januar 2017, 13:30:35
Hat hier jmd noch ein Denkansatz für mich ? Ich weiß leider nicht wie ich die Verknüpfung realisieren soll. Die sub  scheint ja zu funktionieren, zumindest gibt sie beim testen die Uhrzeit des screens aus. lieben Dank
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 20 Januar 2017, 14:29:05
Dann passt das Fragment aus deinem Script noch nicht.
Dreh mal an dem -f8 rum. -f10 oder -f12

Zur Erklärung: das Sript man nix weiter als ein Bash Command zu rufen, was ein Verzeichnis in der Langform listet. Also mit Owner, Gruppen, Zeitstempel, Dateien. Dann wird eine Zeile in Fraktionen zerlegt, anhand eines Trenners (hier Leerzeichen). Du musst also die richtige Spalte zurück geben.
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 20 Januar 2017, 18:36:09
Zitat von: setstate am 20 Januar 2017, 14:29:05
Dann passt das Fragment aus deinem Script noch nicht.
Dreh mal an dem -f8 rum. -f10 oder -f12

Zur Erklärung: das Sript man nix weiter als ein Bash Command zu rufen, was ein Verzeichnis in der Langform listet. Also mit Owner, Gruppen, Zeitstempel, Dateien. Dann wird eine Zeile in Fraktionen zerlegt, anhand eines Trenners (hier Leerzeichen). Du musst also die richtige Spalte zurück geben.

Ah okay, dachte die Anzeige wäre beim Eingabebefehl schon richtig. f10, f12 liefern keine ergebnisse, aber f9 liefert:

"www/snapshots/cam1/Cam1_20170118_191824.jpg "

damit hätte ich ja die notwendige url für ein image widget, richtig? Dann bin ich nur wieder bei dem Problem wie ich das bei jeder Änderung des Subergebnisse in ein Reading schreiben kan, analog für alle 9-12 screens... Wenn da noch jmd helfen kann bin ich bald still :D

Also im Prinzip schreibe alle 5 min sub 1 wert in dummy reading 1, sub 2 wert in dummy reading 2 .... etc..

zusätzliches Problem wird noch, dass die URL in www/.... ausgeben wird und damit das reading in data-url beim image widget falsch verzweigt, da von einem anderen Grundverzeichnis ausgegangen wird...
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 21 Januar 2017, 11:05:59
OK update :) Trotz nicht vorhandener Perlkenntnisse habe ich mir was gebaut was scheinbar klappt:

sub last_pic($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
my $file = qx(ls -ltn --time-style='+%Y-%m-%d %H:%M:%S' www/tablet/images/Kamera/*.jpg | sed -n $ss | cut -d " " -f9);
my $file2 = ".././$file";

return $file2;


}


Wenn ich per SET ein Testbild in ein dummy schreibe und dieses per Image Widget aufrufe klapp dies auch :)

Das einzige was ich nicht raffe und auch nicht geht wie ich nun aus dieser sub die bilder 1.2.3.4.5.6 in die reaadings 1.2.3.4.5.6 eines dummys schreibe, beispielsweise alle 5 min. Die Zeit schaffe ich mit AT, aber irgendwie raff ich den zusammenhang mit SET befehl Userreadings etc nicht. Wenn das klappt ist das Urspungsziel erreicht. DANKE!!!!!!!
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: sinus61 am 21 Januar 2017, 12:57:39
Wenn du die sub per at aufrufst bau doch das am Ende ein:

fhem( "setreading dummy reading $file2" );

dummy und reading natürlich entsprechend ersetzen

Aber IPCAM legt doch eh Readings für die letzten Snapshots an, reicht das nicht?
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 21 Januar 2017, 18:02:41
Zitat von: sinus61 am 21 Januar 2017, 12:57:39
Wenn du die sub per at aufrufst bau doch das am Ende ein:

fhem( "setreading dummy reading $file2" );

dummy und reading natürlich entsprechend ersetzen

Aber IPCAM legt doch eh Readings für die letzten Snapshots an, reicht das nicht?

Okay das versuche ich mal, dann die Sub 6 mal perf AT mit jeweils geänderten Readings sollte dann ja funktionieren.. hoffentlich :>

IPCamp macht z.b 3 screens wenn es klingelt und überschreibt diese dann wenn es wieder klingelt ODER es macht halt Timestamps in die Dateinamen und zeigt per reading aber nur die letzten 3 an. Mache ich also 3 SCreens beim Klingel sehe ich im Reading von IPCAM immer nur das letzte Klingeln selbst wenn es 5 mal geklingelt hat. Also muss ich Dateinamenunabhängig die letzten anzeigen lassen.
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 21 Januar 2017, 18:20:12
Zitat von: sinus61 am 21 Januar 2017, 12:57:39
Wenn du die sub per at aufrufst bau doch das am Ende ein:

fhem( "setreading dummy reading $file2" );

dummy und reading natürlich entsprechend ersetzen

Aber IPCAM legt doch eh Readings für die letzten Snapshots an, reicht das nicht?

okay das klappt, ABER ich muss die sub ja öfter aufrufen also alle 5 min z.b last_pic(1),last_pic(2), etc...
Jetzt würde das setreading ja immer wieder das gleiche reading überschreiben. Wie kann ich jetzt die Zahl mit in das Reading übernehmen? Als Laie dachte ich jetzt fhem( "setreading dummy reading$ $file2" );  würde klappen also das die nummer aus last_pic(X) übernommen wird in ReadingX. Wenn das noch geht it die Aufgabenstellung erfüllt :D DANKE EUCH SCHON JETZT VIELMALS!!!!

EDIT: Habe das jetzt mit einem Umweg gelöst!!! Danke, ich teste mal das Gesamtkonstrukt am Wochenende. Wenn dann alles klappt würde ich für mögliche Nachamer die Gesamtlösung  posten und dann können wir schließen. Ich  hoffe es klappt alles :>
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Badflex am 22 Januar 2017, 14:34:06
Das interessiert mich auch!
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 22 Januar 2017, 14:56:09
Also vielen Dank an alle, FAST alles klappt.

Was ich wollte?

Wenn es klingelt sollte in FTUI die Anzahl der verpassten Türklingelrufe angezeigt werden. Per klick auf das Symbol sollte eine Liste kommen mit der Zeit des Klingelns + X Screens der Kamera.

Im folgenden:

- Meine giratürstation setzt einen Rundruf in die Fritzbox ab
- Diese Rufe fange ich in einer Calllist auf, die mir dann per Reading zur Verfügung stellt wann es klingelt.

- Gleichzeitig habe ich eine Kamera mit IPCAM eingebunden
- Wenn es klingelt wird per

define Tuerklingel_Zaehler dummy
define diZaehlen_Test DOIF (([CallMonitor:event] eq "call") and ([CallMonitor:external_name] eq "TuerklingelTEST")) (set Tuerklingel_Zaehler {([Tuerklingel_Zaehler]+1)})
define Tuerklingel_Zaehler_reset at *01:00:00 set Tuerklingel_Zaehler 0
define dummyKamerabild dummy
define diKlingel_Test DOIF (([CallMonitor:event] eq "call") and ([CallMonitor:external_name] eq "TuerklingelTEST")) (get Cam1 image)


der Zähler hochgesetzt den ich per LABEL abfragen kann und Screenshots mit der Kamera gemacht (habe dies in IPCAM auf 2 gestellt).

Die SCreens mit IPCAM werden mit Timestamp versehen und sind daher nicht ohne weiteres zuzuordnen, dahilft die SUB:

sub last_pic($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
my $file = qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/tablet/images/Kamera/*.jpg | sed -n $ss | cut -d " " -f8);
my $file2 = ".././$file";
fhem( "setreading dummyKamerabild reading_$ss $file2" );

return $file2;


}


Diese SUB werde ich per AT für sub last_pic(1), sub last_pic(2), ... etc ausführen lassen.

Im TabletUI habe ich auf mein Türklingelsymbol mit dem Zähler ein Popup mit einer Tabelle.
In der Tabelle dagestellt werden dann pro Reihe 1. das 1.Reading aus der Calllist und 2. 3. Das Bild 2 und 3 aus dem Dummy KameraBild welches die Bildpfade der SUB übergeben bekommt.

Das klappt alles wunderbar. Einzige Problemstellung bisher, dass das Bild bei Klick vergrößert, aber daran arbeiten wir in einem anderen Thread. Vielen Dank allen Unterstützern. Von mir aus kann das hier closed, vielleich brauch ja hier nochmal jmd so was :)
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Mumpitz am 22 Januar 2017, 22:44:42
Zitat von: Andre0909 am 22 Januar 2017, 14:56:09
Also vielen Dank an alle, FAST alles klappt.

Was ich wollte?

Wenn es klingelt sollte in FTUI die Anzahl der verpassten Türklingelrufe angezeigt werden. Per klick auf das Symbol sollte eine Liste kommen mit der Zeit des Klingelns + X Screens der Kamera.

Im folgenden:

- Meine giratürstation setzt einen Rundruf in die Fritzbox ab
- Diese Rufe fange ich in einer Calllist auf, die mir dann per Reading zur Verfügung stellt wann es klingelt.

- Gleichzeitig habe ich eine Kamera mit IPCAM eingebunden
- Wenn es klingelt wird per

define Tuerklingel_Zaehler dummy
define diZaehlen_Test DOIF (([CallMonitor:event] eq "call") and ([CallMonitor:external_name] eq "TuerklingelTEST")) (set Tuerklingel_Zaehler {([Tuerklingel_Zaehler]+1)})
define Tuerklingel_Zaehler_reset at *01:00:00 set Tuerklingel_Zaehler 0
define dummyKamerabild dummy
define diKlingel_Test DOIF (([CallMonitor:event] eq "call") and ([CallMonitor:external_name] eq "TuerklingelTEST")) (get Cam1 image)


der Zähler hochgesetzt den ich per LABEL abfragen kann und Screenshots mit der Kamera gemacht (habe dies in IPCAM auf 2 gestellt).

Die SCreens mit IPCAM werden mit Timestamp versehen und sind daher nicht ohne weiteres zuzuordnen, dahilft die SUB:

sub last_pic($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
my $file = qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/tablet/images/Kamera/*.jpg | sed -n $ss | cut -d " " -f8);
my $file2 = ".././$file";
fhem( "setreading dummyKamerabild reading_$ss $file2" );

return $file2;


}


Diese SUB werde ich per AT für sub last_pic(1), sub last_pic(2), ... etc ausführen lassen.

Im TabletUI habe ich auf mein Türklingelsymbol mit dem Zähler ein Popup mit einer Tabelle.
In der Tabelle dagestellt werden dann pro Reihe 1. das 1.Reading aus der Calllist und 2. 3. Das Bild 2 und 3 aus dem Dummy KameraBild welches die Bildpfade der SUB übergeben bekommt.

Das klappt alles wunderbar. Einzige Problemstellung bisher, dass das Bild bei Klick vergrößert, aber daran arbeiten wir in einem anderen Thread. Vielen Dank allen Unterstützern. Von mir aus kann das hier closed, vielleich brauch ja hier nochmal jmd so was :)
Ich hab hier sehr interessiert mitgelesen. Wärst du auch bereit deinen Ftui Code zu veröffentlichen?

Hast du nun 10 subs in der myutil angelegt?
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 22 Januar 2017, 23:14:13
Zitat von: Mumpitz am 22 Januar 2017, 22:44:42
Ich hab hier sehr interessiert mitgelesen. Wärst du auch bereit deinen Ftui Code zu veröffentlichen?

Hast du nun 10 subs in der myutil angelegt?

Hmm sehr gerne aber es git leider noch ein Problem. Nicht jedes Bild spukt den link mit F8 aus, manche auch mmit F9. Solange der Grund noch nicht bekannt ist oder es keine Lösung gibt klappt es nicht wie geplant. Alternativ müsste man eine SUB schreiben die die Bilder kopiert und in 1-10 umbenennt und das bei jeder Änderung. Wenn es weiteres dazu gibt meld ich mich oder gerne wenn jmd eine Lösung findet
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 28 Januar 2017, 20:36:36
Ich glaube ich weiss jetzt warum mal -f8 mal -f9 die Lösung ist:


-rw-r--r-- 1 fhem dialout  65848 2017-01-28 17:55:45 www/tablet/images/Kamera/Cam1_20170128_175542.jpg
-rw-r--r-- 1 fhem dialout  65848 2017-01-28 17:55:45 www/tablet/images/Kamera/Cam1_snapshot.jpg
-rw-r--r-- 1 fhem dialout 135472 2017-01-28 17:55:42 www/tablet/images/Kamera/Cam1_20170128_175540.jpg
-rw-r--r-- 1 fhem dialout 111636 2017-01-28 15:54:35 www/tablet/images/Kamera/Cam1_20170128_155432.jpg
-rw-r--r-- 1 fhem dialout 230236 2017-01-28 15:54:32 www/tablet/images/Kamera/Cam1_20170128_155430.jpg


So is die Dateiausgabe. Bei den Dateien die "6-stellig" groß sind taucht das Problem auf, ich denke da davor 2 statt einem Leerzeichen sind. Hat jmd eine Problemlösung? :/ Denke bei 4 Stelligen Dateigrößen müsste es -f10 sein bei 5 Stelligen -9 und bei 6-stelligen -f8. Kann man das Leerzeichen irgendwie funktionstechnisch ausklammern?
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 28 Januar 2017, 21:15:58
du kannst anstatt cut auch awk benutzen

awk '{print $8}'


ls -lt --time-style='+%Y-%m-%d %H:%M:%S' default/*.png | sed -n '1p' | awk '{print $8}'
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 29 Januar 2017, 13:14:14
Zitat von: setstate am 28 Januar 2017, 21:15:58
du kannst anstatt cut auch awk benutzen

awk '{print $8}'


ls -lt --time-style='+%Y-%m-%d %H:%M:%S' default/*.png | sed -n '1p' | awk '{print $8}'

Danke für deine Hilfe setstate, aber das scheint so auch nicht zu funktionieren. Egal welche "nummer" ich aufrufe ich kriege immer als Ausgabe die selbe Zeile

-rw-r--r-- 1 fhem dialout 65848 2017-01-28 17:55:45 www/tablet/images/Kamera/Cam1_20170128_175542.jpg

Meine sub habe ich folgerdermaßen geändert:

sub last_pic($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
my $file = qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/tablet/images/Kamera/*.jpg | sed -n '1p' | awk '{print $8}');
fhem( "setreading dummyKamerabild reading_$ss $file" );

return $file;


}


:( Sorry das ich dami nerve, aber wenn das klappt, klappt alles :D
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 29 Januar 2017, 13:18:26
Im sed Teil musst du natürlich die Variable aus deinem Script benutzen. Ich habe im Beispiel nur einen Festwert zum Testen eingetragen.

sed -n $ss
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 29 Januar 2017, 13:46:51
Zitat von: setstate am 29 Januar 2017, 13:18:26
Im sed Teil musst du natürlich die Variable aus deinem Script benutzen. Ich habe im Beispiel nur einen Festwert zum Testen eingetragen.

sed -n $ss

OK das hätte ich mir auch selber denken können. So weit so gut. Es wird für jeden Aufruf die für das Bild entsprechende Zeile ausgegene :

rw-r--r-- 1 fhem dialout 135472 2017-01-28 17:55:42 www/tablet/images/Kamera/Cam1_20170128_175540.jpg


Aber ich brauche ja nur den Teil

www/tablet/images/Kamera/Cam1_20170128_175540.jpg

Entweder ich habe noch was falsch gemacht? Aber habe es jetzt eigentlich so übernommen wie ich sollte


sub last_pic($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
my $file = qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/tablet/images/Kamera/*.jpg | sed -n $ss | awk '{print $8}');
fhem( "setreading dummyKamerabild reading_$ss $file" );

return $file;


}


Das "AWK" scheint nicht zu greifen, warum auch immer. Egal on ich 8 oder z.B. 5 setzte bei AWK, es wird immer die ganze Zeile ausgegeben
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 29 Januar 2017, 14:20:09
Mmmmmm?
Geht bei mir


root@fhemserver ~ # echo "rw-r--r-- 1 fhem dialout 135472 2017-01-28 17:55:42 www/tablet/images/Kamera/Cam1_20170128_175540.jpg"| awk '{print $8}'
www/tablet/images/Kamera/Cam1_20170128_175540.jpg
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 29 Januar 2017, 14:31:01
Zitat von: setstate am 29 Januar 2017, 14:20:09
Mmmmmm?
Geht bei mir


root@fhemserver ~ # echo "rw-r--r-- 1 fhem dialout 135472 2017-01-28 17:55:42 www/tablet/images/Kamera/Cam1_20170128_175540.jpg"| awk '{print $8}'
www/tablet/images/Kamera/Cam1_20170128_175540.jpg


Eine google Recherche hat ergeben dass wenn das ganze in qx(...) steht bei AWK dann mit / auskommentiert werden muss.

Ich habe auf

[code]awk '{print \$8}');[/code]

geändert...

ES GEHT :))))
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: setstate am 29 Januar 2017, 14:32:10
DAUMEN HOCH
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 16 März 2018, 21:16:36
Zitat von: setstate am 29 Januar 2017, 14:32:10
DAUMEN HOCH

Moin :) lange ging das script aber aufeinmal schreibt er mir keine Readings mehr.




sub last_pic($)
{
my ($p) = @_;
my $ss = "'".$p."p'";
my $file = qx(ls -lt --time-style='+%Y-%m-%d %H:%M:%S' www/tablet/images/Kamera/*.jpg | sed -n $ss | awk '{print \$8}');
my $file2 = ".././$file";
fhem( "setreading dummyKamerabild reading_$ss $file2" );


return $file2;


}


Wenn ich das richtig lese dann gibt es ein Problem mit:

fhem( "setreading dummyKamerabild reading_$ss $file2" );

weil die Zeichen " ' " aus

my $ss = "'".$p."p'";


nicht mehr akzeptiert wird also die einfach-Semikolons im Reading-Namen.

Da ich nicht ganz raffe was diese Codezeile macht, weiss jmd wie ich es ändenr muss damit die Readings wieder beschrieben werden? Ein simples "ersetzen" durch ein Nicht-Sonderzeichen ging natürlich nicht :D

DANKE
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Andre0909 am 16 März 2018, 21:21:37
hmm hab es in

my $ss = "'".$p."p'";

geändert, scheint zu gehen :D
Titel: Antw:Die letzten XX Bilder anzeigen
Beitrag von: Thomas41587 am 19 Mai 2020, 09:09:07
Hallo zusammen,
ich bin auf der der Suche nach "Die letzten XX Bilder anzeigen" über dieses ältere Thema gestolpert und wollte den Code übernehmen. Leider klappt das nicht ganz. Wie schon im vorletzten Beitrag von Andre0909 geschrieben, meckert fhem die einfachen Anführungsstriche an:
setreading dummy_aussenbereich_bildarchiv_hof reading_'1p' .././www/snapshots/lichtschranke/IPCAM_aussenbereich_hof_lichtschranke_20200519_082749.jpg
: dummy_aussenbereich_bildarchiv_hof: bad reading name 'reading_'1p'' (allowed chars: A-Za-z/\d_\.-)

Aber auch die Korrektur aus dem letzten Beitrag (die eigentlich genau das Gleiche ist?!) hilft hier nicht.
Hat eventuell jemand einen Tipp, wie die Zeile geändert werden muss? Oder zumindest eine Erklärung, was die Zeile machen soll?