FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fhemer am 16 April 2017, 01:50:31

Titel: Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: fhemer am 16 April 2017, 01:50:31
Hallo,

mit
fhem( "set telebot sendPhoto /media/kamera1_123456.jpg" );;
versende ich Bilder. Das funktioniert.
/media/kamera1_$(date -d -5seconds '+%H%M%S').jpg auf der Konsole vom Raspberry funktioniert einwandfrei!
aber das gleiche
fhem( "set telebot sendPhoto /media/kamera1_$(date -d -5seconds '+%H%M%S').jpg" );;
in FHEM funktioniert nicht.
Ich würde gerne wissen, ob hier bei FHEM bzw. Telegrambot der dyn. Dateiname nicht richtig interpretiert wird?
Was kann man tun? Ich muss auf etwas ältere Bilder zugreifen!

Danke und Frohe Ostern!
Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: viegener am 16 April 2017, 11:36:58
Das was auf der Konsole funktioniert funktioniert so nicht direkt in FHEM, denn das ist shellskript syntax (Also linux Kommandozeile). FHEM ist aber kein shell skript sondern in perl geschrieben, also muss der Ausdruck auch in perl geschrieben werden.

Wenn Du Dich nicht wirklich mit perl befassen möchtest kannst Du immer noch den Umweg über die Ausführung von shellbefehlen in perl gehen
also
`date -d -5seconds '+%H%M%S'`
statt $( etc

Achso das hat natürlich mit telegrambot etc nichts zu tun sondern ist völlig normal, dass Ausdrücke, die in einer Sprache/Umgebung funktionieren nicht einfach identisch in anderen Umgebungen gehen. Mit einem gültigen Strassenbahnticket kommt man ja leider auch nichts ins Kino ;)

Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: dev0 am 16 April 2017, 12:01:04
Zitat von: viegener am 16 April 2017, 11:36:58
Mit einem gültigen Strassenbahnticket kommt man ja leider auch nichts ins Kino ;)

ymmd ;)
Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: micky0867 am 16 April 2017, 12:28:20
Das Problem beginnt doch schon damit, dass du zwei separate Kommandos ausführst, die einen Zeitstempel generieren, und darauf hoffst, dass beide zum gleichen Ergebnis kommen.
Das ist blauäugig.
Wenn du eine Datei mit Zeitstempel anlegst, solltest du ein fhem-Kommando mit genau dem gleichen Zeitstempel ausführen.
Mit dem gleichen meint, erst den Zeitstempel erzeugen und in einer Variablen speichern.
Dann Kommando 1 mit dieser Variablen als Parameter
Dann Kommando 2 mit der gleichen Variablen als Parameter

Man kann fhem Kommandos von der Shell aus aufrufen:
http://s6z.de/cms/index.php/homeautomation/fhem/34-fhem-befehle-auf-der-shell-ausfuehren

Micky
Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: fhemer am 16 April 2017, 13:57:42
Danke für die Antworten.

Mit dem Speichern der Zeit in einer Variablen hast Du im Prinzip recht, micky. Das ist mir als Projektleiter sogar mal bei einem Codereview aufgefallen, obwohl der Programmierer gut Geld bekam. Sind eigentlich Grundlagen.
Der Hintergrund ist folgender: Die Kamera speichert alle 5 Sekunden ein jpg mit Zeitstempel im Dateinamen. Wenn ich nun bei einem Ereignis selbst die 5 letzten Dateinamen erzeugte, dann sollte das zu 99% funktionieren, was mir jetzt wirklich erstmal langt, außer es hat jmd. eine superelegante Lösung.

viegener, ich habe Dein Beispiel ausprobiert, Danke. Hat leider nicht funktioniert.
fhem( "set telebot sendPhoto /media/kamera1_`date -d -5seconds '+%H%M%S'`.jpg" );;
Habe nun einen Logeintrag damit ergänzt. Aber bei
Log 1, "set telebot sendPhoto /media/kamera1_`date -d -5seconds '+%H%M%S'`.jpg";;
steht dann im Log:
set telebot sendPhoto /media/kamera1_20 5 27 997 998date -d -5seconds '+%H%M%S').jpg : FAILED file :/media/kamera1_20: not found or empty

Habe es eben ausprobiert. Wo kommt denn die 20 her? Und der Rest?

Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: viegener am 16 April 2017, 17:53:49
Ach je - Nein einfach den einen Ausdruck durch den anderen ersetzen geht nicht.
Du müsstest Due einzelnen Teile schon zusammenfügen also so etwas wie
fhem( "set telebot sendPhoto /media/kamera1_".`date -d -5seconds '+%H%M%S'`.".jpg" )

Ob das jetzt geht habe ich nicht ausprobiert und vielleicht geht das auch irgendwo verloren, je nachdem wo dieses Konstrukt auftaucht. Die doppelten Semikolons zeigen mir, dass das wieder irgendwo in ein Kommando eingebaut ist und dabei vielleicht die Klammerungen/Befehle schief gehen.

Grundsätzlich würde ich es so nicht machen, sondern über perl den INhalt des Verzeichnisses überprüfen und dann die neueste Datei nehmen?

Zitat von: fhemer am 16 April 2017, 13:57:42
außer es hat jmd. eine superelegante Lösung.

Nein, das ist eigentlich nicht der Sinn und Zweck, das das jemand anders für Dich programmiert oder?
Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: fhemer am 16 April 2017, 18:13:23
Ne, natürlich programmiere ich gerne selbst. Ich mache aber schon Stunden insgesamt, gestern und heute an diesem Dateiproblem herum  >:(

Wo kommen denn jetzt wieder diese Punkte her, um einen String zusammenzubauen? Egal....

Ne, ich möchte gar nicht (nur) die letzte Datei nehmen, sondern etwas in die Vergangenheit schauen!  ;)
Titel: Antw:Dynamische Dateinamen mit Telegram in FHEM
Beitrag von: viegener am 16 April 2017, 23:23:24
Zitat von: fhemer am 16 April 2017, 18:13:23
Ne, natürlich programmiere ich gerne selbst. Ich mache aber schon Stunden insgesamt, gestern und heute an diesem Dateiproblem herum  >:(

Wo kommen denn jetzt wieder diese Punkte her, um einen String zusammenzubauen? Egal....

Ne, ich möchte gar nicht (nur) die letzte Datei nehmen, sondern etwas in die Vergangenheit schauen!  ;)


Wie gesagt - shellsyntax (oder wie von Dir beschrieben Konsolenbefehle) funktionieren so nicht direkt in FHEM. Wenn Du gerne programmierst schau Dir ein paar Grundlagen zu perl an, sonst ist es in FHEM an vielen Stellen schwierig.

Zum Beispiel unter https://www.google.de/search?q=perl+string+zusammenbauen (https://www.google.de/search?q=perl+string+zusammenbauen) findest Du auch Informationen, wie sich in perl Strings zusammensetzen lassen

Da ich nicht weiss, ob es jetzt funktioniert kann ich auch nicht weiter helfen