Kamerabild per FTP auf einen Webserver automatisch hochladen

Begonnen von Tipsinipper, 24 Mai 2016, 16:34:30

Vorheriges Thema - Nächstes Thema

Tipsinipper

Hallo,
habe einen RaspberryPi (nicht V3) mit dem Betriebssystem Jessie eingerichtet. Letzte FHEM Version installiert, ein altes Smartphon für den Test eingerichtet.
Ich bekomme ein Bild, es wird auch auf der SD Karte gespeichert und aktualisiert.

Aber.., beim Hochladen auf die Webseite, das auch klappt, bekomme ich im Log eine Fehlermeldung.

Nachstehend meine fhem.cfg:


attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd SecurityCheck:\
\
WEB has no basicAuth attribute.\
\
Restart FHEM for a new check if the problem is fixed,\
or set the global attribute motd to none to supress this message.\

attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 5

define WEB FHEMWEB 8083 global
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB editConfig 1
attr WEB group Kommunikation
attr WEB iconPath default:openautomation:fhemSVG
attr WEB menuEntries restart,cmd=shutdown+restart,update,cmd=update,updatecheck,\
   cmd=update+checkcheck,rereadCfg,cmd=rereadcfg
attr WEB refresh 60
attr WEB room System
attr WEB stylesheetPrefix dark

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt

# Test Webcam
define interactive_webcam weblink iframe http://Name:Passw@192.168.1.16:8080/shot.jpg
attr interactive_webcam htmlattr width="660" height="500"

define Cam1 IPCAM Name:Passw@192.168.1.16:8080
attr Cam1 delay 1
attr Cam1 event-on-update-reading snapshots
attr Cam1 path shot.jpg
attr Cam1 room Kamera
attr Cam1 snapshots 1
attr Cam1 storage /opt/fhem/cam1

define snapshot_cam at +*00:01:00 get Cam1 image

define Cam1_nfy notify snapshot_cam {\
       {system('sudo /opt/fhem/ftppic.sh&');;}\  # Hier gibt es im Log die Rückgabe: -1
}

#Ende Webcam#######################################################





Das kleine Script sieht folgendermassen aus( Habe ich aus dem RasberryPi Forum und für mich angepasst http://www.forum-raspberrypi.de/Thread-tutorial-automatisierte-dateiuebertragung-ftp-sftp-scp-usw ):



#!/bin/bash
#
# Titel: FTP Transfer Script
# Description: Datei automatisch auf einen festgelegten FTP-Server hochladen.
# Version: 0.1

### EINSTELLUNGEN

FTP_SERVER=IP-Adresse   #Bsp.: 192.168.0.100
FTP_USER=Name
FTP_PASS=Passwort

#Die Datei welche uebertragen werden soll, liegt in /opt/fhem/cam1/
FILE2TRANSFER=Cam1_snapshot.jpg
### ENDE DER EINSTELLUNGEN

cd cam1
# Dateien per FTP auf den Server schieben
ftp -ni << END_UPLOAD
  open $FTP_SERVER
  user $FTP_USER $FTP_PASS
  # cd $REMOTEDIR
  bin
  mput $FILE2TRANSFER
  quit
END_UPLOAD
cd ..
exit 0

[/size]

Der User fhem hat Rechte zum Ausführen des Scripts. (Eintrag in der /etc/sudoers (fhem ALL=NOPASSWD: /opt/fhem/ftppic.sh)
Das Script liegt im fhem-Verzeichnis (Rechte:0544, Gruppe: dialout, Besitzer: fhem).
Das Verzeichnis "cam1" liegt im gleichen Verzeichnis.
Es klappt ja alles, bis auf die Fehlermeldung, die mir das Log zumüllt.
Auszug aus dem Log(verbose 5):



2016.05.24 15:26:40 4: Cam1_nfy exec {
       {system('sudo /opt/fhem/ftppic.sh&');;}
}
2016.05.24 15:26:40 5: Cmd: >{
       {system('sudo /opt/fhem/ftppic.sh&');}
}<
2016.05.24 15:26:40 3: Cam1_nfy return value: -1
2016.05.24 15:26:40 4: HttpUtils url=<hidden>
2016.05.24 15:26:41 4: <hidden>: HTTP response code 200
2016.05.24 15:26:41 4: HttpUtils <hidden>: Got data, length: 18540
2016.05.24 15:26:41 5: IPCAM Cam1 Image Format: JPEG
2016.05.24 15:26:41 5: IPCAM Cam1 snapshot /opt/fhem/cam1/Cam1_snapshot.jpg written.
2016.05.24 15:26:41 5: IPCAM Cam1 snapshot /opt/fhem/cam1/Cam1_snapshot_1.jpg written.
2016.05.24 15:26:41 4: IPCAM Cam1 image: Cam1_snapshot_1.jpg
2016.05.24 15:26:41 5: Triggering Cam1 (1 changes)
2016.05.24 15:26:41 5: Notify loop for Cam1 snapshots: 1
?Invalid command




Gibt es eine Möglichkeit die Fehlermeldung zu unterdrücken, oder fällt jemand was besseres ein? Kann die FTP Übertragung evtl. auch in Perl realisiert werden?
Sicherheit muss ich noch einbauen.

Gruß aus der Nähe von Nürnberg
Tipsinipper
Mfg

Tipsinipper

dev0

Ich sehe keine Fehlermeldung. Die Ausgabe des return value kannst du u.a. mit "attr Cam1_nfy verbose 2" unterdrücken.

Tipsinipper

Danke dev0 für die schnelle Antwort.

verbose2 bringt leider nichts. Es kommt im Log immer "?Invalid command". Auch wenn ich auf "verbose 0" gehe.
Mfg

Tipsinipper

dev0


dev0

Benutz mal den DEF Editor auf der Detailseite des Notifies und trage dort folgendes ein:

snapshot_cam { system('sudo /opt/fhem/ftppic.sh&') }

Wernieman

#5
Und zusätzlich:
Du startest Dein FHEM automatisch? Dann werden die Umgebungsvariablen nicht gesetzt. Er kann z.B. also das "Kommando" ftp nicht finden. Du must den vollen Pfad angeben. Bei Automatisch gestarteten Scripten ist dieses übrigens immer sinnvoll!

also z.B.:
/usr/bin/ftp ......

Wo genau das Kommando liegt kannst Dur ausfinden mit:
whereis ftp
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Tipsinipper

Hallo,
vielen Dank für die schnelle Antwort. Konnte es aber heute erst ausprobieren.
Beide Tipps haben nichts gebracht. Leider.
Im Prinzip funktioniert die Übertragung, aber es kommt immer eine Fehlermeldung.

@dev0 Fehlermeldung ist die Gleiche.
@Werniemann Jetzt kommt eine andere Fehlermeldung: /opt/fhem/ftppic.sh:
--------------------
line 24: /usr/ftp/bin/ftp: No such file or directory
----------------------------
Müllt mir aber auch das Log voll.
Vielleicht hat es mit dem Remotedirectory zu tun. Der FTP User kommt bei der Anmeldung automatisch in das richtige Directory auf dem Webserver. Deshalb hatte ich in dem Script das "cd $REMOTEDIR" ausgeblendet.

Hat noch jemand eine Idee?
Mfg

Tipsinipper

betateilchen

#7
Zitat von: Tipsinipper am 26 Mai 2016, 19:07:24
line 24: /usr/ftp/bin/ftp: No such file or directory

Der Pfad /usr/ftp/bin/ ist definitiv falsch.

Vermutlich sollte das /usr/bin/ heißen.

Was mich aber wundert:

Zitat von: Tipsinipper am 24 Mai 2016, 16:34:30
Aber.., beim Hochladen auf die Webseite, das auch klappt, bekomme ich im Log eine Fehlermeldung.

Also wenn das Hochladen funktioniert, dann war doch ursprünglich gar nicht das ftp selbst das Problem das zur Fehlermeldung führt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

P.S. Hatte extra mit angegeben, wo Du das "ftp" finden kannst. sprich:
whereis ftp

Allerdings ist mir jetzt erst aufgefallen:
{system('sudo /opt/fhem/ftppic.sh&');;}\  # Hier gibt es im Log die Rückgabe: -1
mach bitte mal zwischen dem & und dem Script ein Leerzeichen.

Und zum Verständnis:
Es macht was es soll, funzt also, meldet aber eine Fehlermeldung?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Tipsinipper

Hallo,
@betateilchen. Du hast Recht. Tippfehler meinerseits. Habe ich korrigiert. Hat aber nichts geändert.
@Werniman. Ein Leerzeichen zwischen .sh und '&' ändert nichts an der Fehlermeldung.

Ich werde morgen mal mit PUTTY das Script per Hand durchgehen. Vielleicht finde ich da was.
Mfg

Tipsinipper

Wernieman

Und bitte als User FHEM!

Sonst "bringt" es nichts ... dein Fhem läuft doch unter dem user?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Tipsinipper

Gefunden! :)

Nachdem ich das Script per Hand ausgeführt habe ist mir aufgefallen, dass ich keine Pfadangabe für das Bild angeben darf. Ftp will dann auf dem Remoteserver in das gleiche Verzeichnis schreiben, das aber nicht existiert. Da aber kein anderes Verzeichnis bei dem FTP-User möglich ist, kommt das Bild offensichtlich an. Aber es gibt die Fehlermeldung.

Danke für eure Hilfe.

Bis zum Nächstenmal
Mfg

Tipsinipper