- systemd (otherwise the timer have to be changed (crond is not able to operate at 7 second intervals)
- python3, python3-pip
sudo apt install python3-pip
- libcurl4-openssl-dev libssl-dev
sudo apt install libcurl4-openssl-dev libssl-dev
Get the code with
git clone https://code.ungleich.ch/rouxdo/flashair-uploader.git
flashairup directory to the desired place (e.g.
/home/<USER>/), referred now as WORKDIR
Install the required python packages:
cd WORKDIR pip install -r requirements.txt
Change in the WORKDIR the
flashairup.systemd file and
move the file to
flashairup.timer file to the same location.
The files can be found in the
After move the files to the correct directories, enable the timer with the following statement:
sudo systemctl enable --now flashairup.timer
Configuration and Directory hierarchy
Create the following directory structure inside the WORKDIR:
├── flashairup │ ├── data │ │ ├── cam1 │ │ │ ├── last.txt │ │ │ └── pictures │ │ └── ... │ ├── flashairup.conf │ └── ... └── ...
cam1 is only an example for the name of a cam.
last.txt is needed for keeping track of the index of the last synchronised pictures.
If the card gets formatted, the counter in this file needs to be reset as well.
flashairup.conf should at least contain the
[DEFAULT] ftp_srv = FTP-SERVER ftp_path = PATH ftp_user = USER ftp_pwd = PASSWORD db = new # Set the logger level (DEBUG, INFO, WARNING, ERROR) log_level = DEBUG
Add a cam section to the config file:
[cam1] # cam name ip = CAM-IP location = LOCATION-OF-THE-PICTURES-ON-CAM
[DEFAULT] ftp_srv = my.ftp.server.org ftp_path = media/pictures ftp_user = ftpuser ftp_pwd = strongpassword1 # Decide if the pictures are going to be uploaded in the new db or in the old db db = new # Set the logger level (DEBUG, INFO, WARNING, ERROR) log_level = DEBUG [cam1] ip = 10.0.0.10 location = DCIM/101NIKON
You can examine the log with the following command:
journalctl -lfu flashairup
FlashAir SD-Card is not connecting to the WLAN
First, there may be a configuration error, check the FlashAir Configuration for a correct configuration
Second, the Access Point might run on a channel which is not reachable by the FlashAir card. Ensure that the configured channel is between 1 and 10.
The configuration on the Flashair cards was taken from here
Short concept of the python program
Since the Flashair cards create a small webserver on which the pictures are served, one is able to get them via curl.
The python program therefore uses curl to download the pictures.
With another curl command it is possible to get a list of files on the cam.
The program gets this list and compare the number of the last image with the number on the corresponding
If the number is higher on the Flashair card, the picture gets processed.
By processing, it is meant that the curl command for downloading a file is issued, then the file gets uploaded via FTP
to the remote server and finally the counter in
last.txt gets updated.
This is important, because if there were some mistakes in the processing, the counter will stay the same and therefore,
the picture is downloaded again in the next run.
The job of each python function and object is documented inside the code