Pi Cam als Webcam mit automatischem ftp-upload

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich bin als Kommandozelienhasser eigentlich nicht so der Linux Typ, ich hab mich aber durch diverse Beiträge durchgehangelt und meinen Pi mit Cam als kleine Webcam ans laufen bekommen.
    Dafür hab ich PHP und den Apachen installiert (wirklich nötig?).
    dort (in /var/www) werkelt ein SH-script, das ein Bild macht und es unter /var/www als wc_image.jpg ablegt.
    mitels ftpupload Skript wird das Bild auf meinen externen Webserver hochgeladen (Zugangsdaten zuvor in Datei hinterlegt).
    Das Ganze (also die beiden Skripte) werden vom Cron nun alle 20 Minuten (von 6 bis 21 Uhr) ausgeführt und das klappt so auch.
    Blöd ist nur, das das Aufnahmeskript nur als Root läuft und das upload Skript nur al PI (vmtl. wegen der hinterlegten Zugangsdaten im Userverzeichnis).

    Nun meine Fragen:

    Das müsste doch auch alles in einer einzigen Skriptdatei ohne viel Schnickschnack machbar sein - oder?. Dann gäbe es auch keine Konflikte, wenn der Cron mal zuerst die alte Datei hochlädt, bevor das neue Foto gemacht wird.
    Also zuerst den Raspstill Befehl mit zig Parametern, dann irgendwie per Imagemagick das Bild pimpen und danach per FTP hochladen.

    Kann ich dazwischen noch mit Imagemagick einen Text bzw. Messdaten (Temperatur, Wind) einbinden?
    Geht der Upload auch so, das die Zugangsdaten verschlüsselt werden (sFTP)?

    Brauch ich eigentlich den Apache dazu oder kann ich das auch so irgendwo hin zwischenlagern?
    Der Upload wird final mittels UMTS-Stick erfolgen (hab den Huawei K-3520). Gibt es da schon Menschen, die sowas in der Weise realisiert haben, damit ich das Rad nicht neu erfinden muß?

    Gruß
    Onki

    Einmal editiert, zuletzt von onki (10. Januar 2014 um 12:16)

  • Hey ich kann die leider zu deinem Problem nicht behilflich sein, könntest du mir aber villeichtg kurz helfen? Und zwar ich weis leider nicht woran ich erkenne welchen raspberry pi ich habe es gibt ja model a model b und model b mit 512mb ram. Frage ist wie erkenne ich welchen typ ich habe? Vielen dank im voraus :)

  • Hast Du einen oder zwei USB-Ports?
    Hast Du eine LAN-Schnittstelle?

    kein LAN und 1 x USB = A-Modell
    LAN und 2 x USB = B-Modell


  • Hallo,

    ich bin als Kommandozelienhasser eigentlich nicht so der Linux Typ, ich hab mich aber durch diverse Beiträge durchgehangelt und meinen Pi mit Cam als kleine Webcam ans laufen bekommen.
    Dafür hab ich PHP und den Apachen installiert (wirklich nötig?).
    dort (in /var/www) werkelt ein SH-script, das ein Bild macht und es unter /var/www als wc_image.jpg ablegt.
    mitels ftpupload Skript wird das Bild auf meinen externen Webserver hochgeladen (Zugangsdaten zuvor in Datei hinterlegt).


    Hallo onki, (Na kenn ich den Nick nicht von irgendwo her ;))

    Wenn Du nicht direkt per "http" auf den Pi zugreifen willst, brauchst Du keinen Webserver und auch kein php.

    raspistill selber läuft auch als user, Du könntest, wenn die Daten unbedingt im Webserververzeichnis müssten auch per "sudo cp name.jpg /var/www" hinkopieren oder das Verzeichnis für den user schreibbar machen (chmod), das macht man aber nicht ohne Not.

    Zitat

    Das müsste doch auch alles in einer einzigen Skriptdatei ohne viel Schnickschnack machbar sein - oder?. Dann gäbe es auch keine Konflikte, wenn der Cron mal zuerst die alte Datei hochlädt, bevor das neue Foto gemacht wird.
    Also zuerst den Raspstill Befehl mit zig Parametern, dann irgendwie per Imagemagick das Bild pimpen und danach per FTP hochladen.

    Kann ich dazwischen noch mit Imagemagick einen Text bzw. Messdaten (Temperatur, Wind) einbinden?

    Geht alles. Das mit dem User siehe oben.

    Text einbinden bspw mit


    Das wandelt ein größeres Hochformatbild in 480x640, erweitert das Bild nach unten (Bild selber nach "Norden" verschoben) um 20px in schwarz und schreibt unten rechts ("Südosten") dann bspw den Text "Temperatur" ergänzt um den Wert der zuvor dann evtl festgelegten Variable ${temperatur} (wobei ich /bin/sh bzw /bin/bash als Shell mal voraussetze.

    Die Bildnamen lassen sich natürlich auch per Variablen bspw mit Datum/Uhrzeit versehen, genauso in den Text im Bild usw usw. Tausend Möglichkeiten.

    Ich hab hier die Option gewählt, einen schwarzen Balken unten anzufügen, um nicht irgendwelche Infos direkt im Bild zu haben, was eventuell was verdecken könnte.

    Zitat


    Geht der Upload auch so, das die Zugangsdaten verschlüsselt werden (sFTP)?

    Brauch ich eigentlich den Apache dazu oder kann ich das auch so irgendwo hin zwischenlagern?
    Der Upload wird final mittels UMTS-Stick erfolgen (hab den Huawei K-3520). Gibt es da schon Menschen, die sowas in der Weise realisiert haben, damit ich das Rad nicht neu erfinden muß?

    Sftp ist ne gute Frage, ich nehm ncftpput, aber das kann kein "s".

    Hast schon eine UMTS-Verbindung aufgebaut mit dem Stick? Manche Sticks zicken am RPi. (Mein E303 auch öfter mal).

    Grüße,

    Daniel


  • ich bin als Kommandozelienhasser eigentlich nicht so der Linux Typ,

    Du meinst wahrscheinlich "Kommandozeilenhasser" und das ist behandelbar. Wann hat Dich eine Kommandozeile enttäuscht?


    Dafür hab ich PHP und den Apachen installiert (wirklich nötig?).

    Ich würd' mal sagen: Nein.


    Das müsste doch auch alles in einer einzigen Skriptdatei ohne viel Schnickschnack machbar sein - oder?

    Ich würd' mal sagen: Ja.


    Kann ich dazwischen noch mit Imagemagick einen Text bzw. Messdaten (Temperatur, Wind) einbinden?

    Ich wüsste nicht warum das ein Problem sein sollte.


    Geht der Upload auch so, das die Zugangsdaten verschlüsselt werden (sFTP)?

    Wenn Du irgendwo einen Server stehen hast der sftp kann dann sollte das kein Problem sein.


    Brauch ich eigentlich den Apache dazu oder kann ich das auch so irgendwo hin zwischenlagern?

    Ich wüsste nicht was Apache einem dabei helfen sollte....


    Also summa summarum: Du willst ein Bild von einer Web-Cam machen, mit Imagemagick was draufmachen, und das alles dann per sftp irgendwohin hochladen ja?

    Dafür brauchst Du eine Skriptsprache (shell, Perl, Python, Ruby - whatever) und ein installiertes imagemagick nebst sfpt-client. Apache und PHP brauchst Du dafür nicht.

    Ein wenig Fummelei wird es sein - ich denke nicht dass jemand genau dieses Problem schon gelöst hat, aber es ist trivial - such Dir eine Sprache aus und fang an, wenn Du Probleme hast helfe ich Dir gerne weiter.

    Also erst ein call um ein bild zu machen, dann ein call zu imagemagic um was draufzumachen und dann ein sftp-call zum Hochladen - ist echt simpel - aber Du musst Deine Kommandozeilenphobie dafür ablegen :--)

  • Hallo,

    erstes Problem. Kamera scheint nicht gerade mit Stabilität gesegnet worden zu sein.
    Hatte das ganze mal über mehrere Stunden laufen lassen und dabei blieb die Geschichte dann irgendwann stehen. Es gab noch ein jpg-file im Pi-Ordner mit Tilde "~" hinten dran.
    Nach reboot dann das:


    Also flugs apt-get update und upgrade und dabei wurde recht viel installiert (ca. 60MB).
    Hatte das aber zuletzt vor 2-3 Tagen gemacht (gabs da ein großes Update?).
    Nochmal reboot und nun scheint es wieder zu funzen.
    Ist die Kamera so wackelig?. Falls ja ist es wohl ein Fall für den Eimer, da es im Feld dann nicht einsetzbar ist (10km entfernt und ohne Remote-Einwahl wegen UMTS).

    Gruß
    Onki

  • Hallo,

    PHP5 und Apache2 hab ich wieder runtergeschmissen und Imagemagick ist nun drauf.
    Die Webgeschichte wäre nur dann interessant, wenn ich z.B. via Webinterface Das letzte Bild sehen, ein log anschauen oder Parameter ändern könnte. Klingt aber nach einem Berg Arbeit.

    Bisher sieht mein Skript so aus:

    Ich hab mal juxhalber ${date} dort eingesetzt um das aktuelle Systemdatum / Zeit einzutragen (also den Output wie "date" auf der Konsole ergibt). Klappt aber wie befürchtet nicht.
    Wie kann ich das ändern, damit das Systemdatum nach dem String eingetragen wird?
    Wie definiere ich denn weitere Platzhalter (Temperatur etc.)?
    Positiver Nebeneffekt von Imagemagick ist auf jeden Fall die Reduzierung der Bilddatei von 400kb auf rund 80kb ohne wahrnehmbaren Qualitätsverlust. Prima.

    Gruß
    Onki

    Einmal editiert, zuletzt von onki (11. Januar 2014 um 16:18)


  • via Webinterface Das letzte Bild sehen,

    Der "magische" Parameter von raspistill lautet:

    Code
    --latest /path/to/where/the/image/should/be/filename.jpg

    Obiger Parameter würde einen Link zum gespeicherten Bild im Pfad "/path/to/where/the/image/should/be/" mit dem Namen "filename.jpg" anlegen.

    Für ein Anzeigen im Webbrowser (setzt natürlich wieder einen Deamon voraus) wäre ein

    Code
    --latest /var/www/letztesBild.jpg

    der passende Parameter

  • Hallo eBiBy,

    so ähnlich hatte ich das schon und hatte mir sogar das Bild auf einer index.html eingebunden.
    Hab ich im Moment aber mal zurückgestellt, da ich den Webserver eh nicht via UMTS von außen erreiche.
    Erstmal möchte ich die Baustelle Zeit- und Temperatureinblendung (DS1820 ist schon bestellt), die UMTS Geschichte, den WLAN Stick als Hotspot (um via Konsole ranzukommen) und den Gehäuseeinbau fertig bekommen.

    Mal noch was anderes. Das Ding kommt letztendlich auf unseren Modellflugplatz, der ca. 10km entfernt ist.
    Welche "Präventivmaßnahmen" sind denn sinnvoll (reboot täglich, logfiles leeren etc), damit das Ding möglichst stabil läuft. Wie gesagt ich komm remote vmtl. nicht drauf und möchte nicht alle 3 Tage auf den Platz zum Service fahren. 230V Versorgung ist vorhanden.

    Gruß
    Onki

    Einmal editiert, zuletzt von onki (11. Januar 2014 um 17:28)

  • Ich hab mal juxhalber ${date} dort eingesetzt um das aktuelle Systemdatum / Zeit einzutragen (also den Output wie "date" auf der Konsole ergibt). Klappt aber wie befürchtet nicht.
    Wie kann ich das ändern, damit das Systemdatum nach dem String eingetragen wird?

    Mal /bin/sh (und GNU date) vorausgesetzt:


    Code
    $ date +%Y-%m-%d--%H-%M-%S
    2014-01-11--22-45-48
    $ zeitpunkt=`date +%Y-%m-%d--%H-%M-%S`
    $ echo ${zeitpunkt}
    2014-01-11--22-45-51

    Alles klar? Die Backticks sorgen dafür, dass die Variable mit der Ausgabe des date-Befehls gefüllt wird. (Wobei Backticks manchmal nicht mehr empfohlen werden, stattdessen $(...) benutzt werden sollte, vielleicht sollte ich mich auch mal umgewöhnen) /EDIT: Kannst also auch in Deinem Fall einfach mal die geschweiften Klammern durch runde ersetzen, dann kriegst Du da die Ausgabe von "date" rein ohne Formatoptionen und ohne Umweg über eine Variable.


    Code
    $ zeitpunkt=$(date +%Y-%m-%d--%H-%M-%S)
    $ echo ${zeitpunkt}
    2014-01-11--22-49-14

    Wenn Du also einen Befehl zum Abfragen der Temperatur hast, kannst Du damit auch eine Variable füllen:


    Code
    senstemp=`grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000004b127eb/w1_slave | awk -F't=' '{print $2}'`

    Das fragt einen DS18B20 an one-wire ab.

    Grüße,

    Daniel

    Einmal editiert, zuletzt von deejot (12. Januar 2014 um 11:17)

  • Hi Daniel,

    das hier


    Code
    convert -box black -fill white -font helvetica -draw "text 0,10 \"`date "+%d.%m.%Y %H:%M:%S" -r ausgangsbild.jpg `\"" ausgangsbild.jpg ergebnisbild.jpg


    hab ich aus einem Debian Forum gegoogelt. Damit wird Uhrzeit und Datum oben links eingeblendet.
    Die Richtung und Font kann ich ja über die Parameter regeln.
    Was mir noch unklar ist, ob ich die Anweisung mehrfach machen kann und dazu Zwischenbilder benötige oder wie sonst kann man z.B. einen festen Text (Webcam xyz), das Datum und die Temperatur (mit Textpräfix) in einem Rutsch generieren.

    Genau deswegen (wegen der Syntax - das kann sich doch kein Mensch merken wenn man das nur ab und zu nutzt) mag ich das Linux eigentlich nicht und bin froh, mdas mein Webserver zumindest Plesk davor hat.
    Aber irgendwie muß ich da durch obwohl ich jetzt schon weiß, das ich das nächste Woche schon wieder nachlesen muß.
    Die Platzhalter sind ja vermutlich ähnlich wie bei PHP, sodass ich hier noch nach meinem Gusto anpassen kann.

    Der UMTS Stick scheint auch zu funzen (Pon / Poff), jetzt muß ich nur noch meinen TL-WN 725N WLAN-Stick zum laufen kriegen, damit ich noch an die Konsole komme, wenn ich es via UMTS teste..

    Gruß
    Onki

  • Hallo,

    der Tip mit den runden Klammern war erfolgreich. Nun wird Datum und Uhrzeit (und die Zeitzone) angezeigt.
    Die war natürlich noch auf UTC und da unser Platz im Schwabenländle ist, war hier auch noch Hand anzulegen.

    Code
    sudo dpkg-reconfigure tzdata


    Nur mit:

    Code
    sudo ntpdate ptbtime1.ptb.de

    war mein Pi nicht einverstanden. Das kannte er nicht (welches Paket fehlt da schon wieder?)

    Nun funzt soweit alles (außer NTP). Der UMTS Stick gibt zumindest Lichtsignale von sich was Hoffnung schürt. Gibt es eine Möglichkeit die Empfangsstärke irgendwie herauszufinden. Der T-Mobile Empfang bei uns ist daheim und am Platz grenzwertig und hier wollte ich wissen, wie der Stick das sieht.
    Nächste Baustelle wird der Tempsensor, der ausgelesen und mit eingeblendet werden soll. Ein Ansatz ist ja oben schon aufgezeigt (Danke Daniel).

    Am Freitag beim Bier keimte die Idee auf, man könne doch die Bilder analysieren und wenn ein Wildschwein darauf zu sehen sei eine Audiodatei mit Hundegebell abspielen. Ich denke dafür hat der Pi aber etwas zu wenig Dampf und das klingt nach sehr viel Arbeit:daumendreh2:.

    Gruß
    Onki

    Einmal editiert, zuletzt von onki (13. Januar 2014 um 16:01)

  • Hallo,

    hier mal ein kurzer Zwischenbericht.

    Im Moment macht meine Kamera keine Bilder mehr und mault nur rum (siehe separater Fred).
    Das Gehäuse ist da und der Pi hat auch schon darin platzgenommen.
    Da es sich um ein Alugehäuse mit Kunststoff Front- und Rückplatte handelt, wird es mit dem UMTS-Stick innen drin grenzwertig. Zudem war mir der Servicezugang unklar.

    Daher hab ich leicht umdisponiert und hab mir einen kleinen, separaten UMTS-Router bestellt, den ich in unserer Hütte drin in ca. 2m Entfernung von der Kamera positionieren werde. Da kommt dann auch der UMTS-Stick dran, weil die Empfangslage am Flugplatz grenzwertig ist und ich keine externe Antenne an das Kameragehäuse basteln wollte.

    Somit wird die Kamera via WLAN an den Router angebunden, der dann über den Stick die Internetverbindung herstellt. So kann ich dann auch über den Router (AP) mit Notebook /Tablet zu Servicezwecken auf den Pi zugreifen. Das ist dann auch, dank Webinterface am Router leichter einzurichten.

    Damit muß ich nur eine Stromversorgung (ich speise die 5V über die GPIO Pins ein, da der USB-Stecker zu viel Platz im Gehäuse verballern würde) zum Gehäuse legen. Zudem muß ich noch einen Temperatursensor nach außen führen, damit der Sensor im Schatten positioniert werden kann. Damit bleiben die Anschlüsse zur Außenwelt im überschaubaren Rahmen.
    Einen unauffälligen Platz an der Hütte hab ich auch schon ausgeguckt.
    Bleibt bloß zu hoffen, das meine Kamera bald wieder mit mir spricht. Hab testweise mal ein neues Image gezogen um zu schauen, ob die Kamera noch mit mir knipsen mag. Nicht das die die Grätsche gemacht hat.
    Werd ich die Tage mal austesten.

    Kann auf Wunsch ja auch mal Bilder von Gehäuse machen. Ist halt ein Dummy-Gehäuse und hat blöderweise ein Batteriefach auf der Rückseite. Das macht die Anbringung von Durchbrüchen für Kabel nicht gerade einfach.
    Aber wenn's einfach wäre würde es ja Fußball heißen:auslachen:.

    Gruß
    Onki

  • Hallo,

    ich habe in den letzten Monaten eine Lösung entwickelt, um von einem Raspberry Pi aufgenommene Bilder an einen Webserver zu versenden und diese dann auf einem Smartphone / Tablett / Notebook / Mac / PC anzusehen. Es ist auch eine Software basierte Bewegungserkennung über die Webcam integriert, die auf Wunsch SMS versenden kann.

    Die Lösung funktioniert sowohl mit der internen, als auch mit externen USB-Webcams. Da ich Probleme im Langzeitbetrieb mit der internen Cam des Raspberry hatte, verwende ich allerdings vorzugsweise eine handelsübliche externe Webcam von Logitech, die an den einen USB-Anschluss angeschlossen wird. An den anderen USB-Anschluss kann man entweder einen WLAN-Stick oder direkt einen Telekom oder Vodafone Prepaid Stick anschließen. O2 und E-Plus habe ich noch nicht ausprobiert, müsste aber auch laufen. Ein zusätzlicher externer Router ist bei der UMTS/GSM nicht notwendig, da der Raspberry diese Funktion mit übernimmt. Eventuell benötigt man ein USB-Verlängerungskabel, um den Mobilfunk-Stick bei schlechtem Empfang besser positionieren zu können. Man brauche auch ein deutlich stärkeres Netzteil (1500mA - 2000mA) - alternativ dazu einen externen USB-Hub mit separatem Netzteil - da Webcam und Mobilfunk-Stick relativ viel Strom benötigen.

    Es handelt sich bei dieser Lösung nicht um einen FTP-Upload, sondern um eine intelligente Upload-Technik zu einem externen Webserver. Von diesem kann man die Bilder dann mit einem fast beliebigen Gerät mit Internetzugang und Browser abholen. Da nicht ständig Bilder versendet werden, kommt man meistens auch mit dem monatlichen Daten-Limit von 500 MB aus - wenn man sich nur wenig Bilder anschaut, reichen auch 200 MB aus.

    Da diese Lösung nicht ausschließlich für den Großstadtbereich konzipiert ist, wo sie stabil läuft, suche ich jetzt Leute, die diese Lösung auch in problematischem Umfeld testen.

  • Das bedeutet, dass nur die Bilder hochgeladen werden, die jemand auf dem Webserver ansehen will. Das hat zwei positive Randefekte:

    1.) Ein sehr großen Anteil der Bilder (bei mir sind es etwa 95%) gehen nicht über die Leitung, weil niemand da ist, der sie ansieht. Damit habe ich 95% weniger Datendurchsatz als bei einem normalen FTP-Updload.
    2.) Ist der Datenschutz besser, weil diese Bilder den Raspberry nie verlassen.

    Einen Nachteil möchte ich allerdings dabei auch nicht verschweigen: Es ist etwas langsamer, als der Vorab-FTP-Upload, da die Bilder erst explizit vom Rasberry angefordert werden.

    Gruß

    A.K.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!