***Gelöst*** Telegrambot Bild empfangen und speichern

Begonnen von Tueftler1983, 21 Dezember 2018, 17:58:12

Vorheriges Thema - Nächstes Thema

Tueftler1983

Hallo ich würde gerne vom Handy ein Bild an den FHEM Server schicken und dort wird es dann auf dem USB Stick gespeichert.

Die Auswertung im notify und die get urlForFile Abfrage habe ich soweit aber dann geht ja ein popup auf mit der download URL.
Wie bekomme ich die jetzt kopiert um dann das Bild mit einem Systembefehl wget oder so auf den USB Stick zu speichern?

FHEMBOT:msgText.* { my $sender = ReadingsVal($NAME, "msgPeerId", 0); my $nachricht = ReadingsVal($NAME, "msgText", ""); my $date = TimeNow(); my @array = split / /; if (lc($nachricht) =~ /received photo/ and ($sender == 11111111 or $sender == 00000000) ) { fhem("get FHEMBOT urlForFile [FHEMBOT:msgFileId"); sleep 1; system(wget); fhem("set FHEMBOT message Bild gespeichert."); } }

Tueftler1983


viegener

Oh je so hektisch vor Weihnachten  ;)

Habe nur mal kurz auf Deinen notify geschaut und ich vermute der wget-Befehl bräuchte dann doch noch ein paar Parameter.

Mir ist allerdings auf den ersten Blick nicht klar, von wo denn bei Dir das popup kommt (von wget)?

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Tueftler1983

Nein in dem Modul TelehramBot wenn man da das Bild abrufen will, muss Mann erst oben den get urlForFile Befehl ausführen und dort den string mitgeben der im reading msgFileId steht.
Dann popt ein Fenster auf in dem eine URL steht gibt man diese im Browser ein, startet der download vom Bild.

Hoffe ich konnte es einigermaßen erklären.

viegener

Nun ja das Modul TelegramBot kenne ich sehr wohl  ;)

Der get Befehl liefert nur ein Popup wenn in der FHEM-Oberfläche aufgerufen ansonsten gibt er den Wert wie andere Get-Befehle auch zurück . In Deinem notify sollte aus meiner Erfahrung kein Popup kommen, deshalb meine Frage!

Du musst die Daten aber zwischenspeichern

Also mal als Vorschlag, ohne dass ich das jetzt überprüft habe

FHEMBOT:msgText.* { my $sender = ReadingsVal($NAME, "msgPeerId", 0); my $nachricht = ReadingsVal($NAME, "msgText", ""); my $date = TimeNow(); my @array = split / /; if (lc($nachricht) =~ /received photo/ and ($sender == 11111111 or $sender == 00000000) ) { my $url = fhem("get FHEMBOT urlForFile [FHEMBOT:msgFileId"); sleep 1; system("wget $url"); fhem("set FHEMBOT message Bild gespeichert."); } }



Im Prinzip ist mir vieles in Deinem notify nicht klar
- Wofür benötigst Du das array?
- Dein Notify wird auch sehr häufig getriggert, da könntest Du auch die Überprüfung im if in die notify-Bedingung setzen
- der wget Befehl sollte vermutlich auch eine Zieldatei definieren, damit man es wiederfindet
...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Tueftler1983

Ich habe ein notify als Vorlage genommen das mit eine Nachricht ( VW km-stand Preis Liter) verlegt und und mir preis pro Liter, trip seid dem letzten tanken, etc berechnet und speichert.
Dieses habe ich soweit ich konnte angepasst da ich mich mit notify nicht auskenne und ich sonst alles mit doif mache.

Das notify ist wahrscheinlich sub optimal.
Der Pfad wohin das Bild gespeichert werden soll ist, /media/usb/bilder/

Hoffe ich konnte aufklären wie das notify im jetzigen zustand zustande gekommen ist. Es war ein Versuch.

viegener

War nicht nötig mir das zu erklären, aber danke trotzdem

Was helfen würde, wäre eine Rückmeldung zu dem modifizierten notify?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Tueftler1983

Also habe das notify angepasst mit der richtigen peerid und einem Pfad wo das Bild gespeichert werden soll und dann mal ein Bild gesendet.
Das kommt dann im log file.
2018.12.25 15:53:13 3: get FHEMBOT urlForFile [FHEMBOT:msgFileId : urlForFile failed: <undef>
sh: 1: cannot open undef: No such file


FHEMBOT:msgText.* { my $sender = ReadingsVal($NAME, "msgPeerId", 0); my $nachricht = ReadingsVal($NAME, "msgText", ""); my $date = TimeNow(); my @array = split / /; if (lc($nachricht) =~ /received photo/ and ($sender == 99999900 or $sender == 9999999000) ) { my $url = fhem("get FHEMBOT urlForFile [FHEMBOT:msgFileId"); sleep 1; system("wget $url /media/usb/bilder"); fhem("set FHEMBOT message Bild gespeichert."); } }

viegener

Also dann probier doch mal das hier:

FHEMBOT:msgText.* { my $sender = ReadingsVal($NAME, "msgPeerId", 0); my $nachricht = ReadingsVal($NAME, "msgText", "");   if (lc($nachricht) =~ /received photo/ and ($sender == 11111111 or $sender == 00000000) ) { my $fileid=ReadingsVal($NAME, "msgFileId", ""); my $url = fhem("get FHEMBOT urlForFile $fileid");  system("wget $url"); fhem("set FHEMBOT message Bild gespeichert."); } }
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Tueftler1983

Hey, also jetzt klappt es wie es soll, besten dank?

Der code ist im wget Befehl um das download Verzeichnis erweitert.

Besten dank nochmal

FHEMBOT:msgText.* { my $sender = ReadingsVal($NAME, "msgPeerId", 0); my $nachricht = ReadingsVal($NAME, "msgText", ""); if (lc($nachricht) =~ /received photo/ and ($sender == 000000000 or $sender == 000000000) ) { my $fileid=ReadingsVal($NAME, "msgFileId", ""); my $url = fhem("get FHEMBOT urlForFile $fileid"); system("wget -P /media/usb/bilder/ $url"); fhem("set FHEMBOT message Bild gespeichert."); } }