Die letzten XX Bilder anzeigen

Begonnen von Andre0909, 14 Januar 2017, 18:19:15

Vorheriges Thema - Nächstes Thema

Andre0909

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!!

setstate

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.

Andre0909

#2
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 :)

setstate

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 ....

Andre0909

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


setstate

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 !!!

Andre0909

#6
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 :/








Andre0909

Hast du hier evtl noch einen Tipp für mich setstate? Ich denke die Lösung ist nah :/

setstate

Was passiert denn, wenn du {  last_pics(1); } in der Fhem Eingabe sendest?

Andre0909

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  :-\

Markus Bloch

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)}
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Andre0909

#11
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!!

Andre0909

#12
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

setstate

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.

Andre0909

#14
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...

Andre0909

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!!!!!!!

sinus61

#16
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?

Andre0909

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.

Andre0909

#18
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 :>

Badflex

Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

Andre0909

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 :)

Mumpitz

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?

Andre0909

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

Andre0909

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?

setstate

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}'

Andre0909

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

setstate

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

Andre0909

#27
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

setstate

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

Andre0909

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 :))))

setstate


Andre0909

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

Andre0909

hmm hab es in

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

geändert, scheint zu gehen :D

Thomas41587

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?