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 (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
Ich sehe keine Fehlermeldung. Die Ausgabe des return value kannst du u.a. mit "attr Cam1_nfy verbose 2" unterdrücken.
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.
Ahh, hatte die Zeile übersehen.
Benutz mal den DEF Editor auf der Detailseite des Notifies und trage dort folgendes ein:
snapshot_cam { system('sudo /opt/fhem/ftppic.sh&') }
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
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?
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.
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?
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.
Und bitte als User FHEM!
Sonst "bringt" es nichts ... dein Fhem läuft doch unter dem user?
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