Die letzten XX Bilder anzeigen

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

Vorheriges Thema - Nächstes Thema

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