Skip to content
pddpauw edited this page Jan 15, 2024 · 7 revisions

1. Links

original repo: https://github.com/mcguirepr89/BirdNET-Pi

installation guidelines: https://github.com/mcguirepr89/BirdNET-Pi/wiki

2. Monitoring of multiple remote devices, connected over 4G

this section describes the setup for a remote installation which we are testing as we speak

Hardware

Raspberry pi

the raspberry pi as a Pi5 (4G RAM), in a standard case with fan

Microphone

each Pi has cheap DIY microphone with AOM capsule (couple of Euros) connected to USB audio adapter (Adafruit, 7 Eur). Comparison to high quality Rhode microphone is described here

4G connection

the Pi5 is connected over WiFi with a LTE 4G router (USB stick). This is probably not to most energy efficient approach: best option would be to connect with the 4G dongle over USB, thus taking out the WiFi of the Pi and the WiFi of the 4G dongle. Potential (energy) optimization possible here, but for now we -and as we had this piece of hardware around- we continued with this set-up. The dongle has a SIM card that can work with multiple providers, which should help in areas where there is limited connection (so if only one provider is available in that area, this one can used at least).

Power

through testing, we found out that this installation requires approx 7W power. We are supplying this with a solar panel and battery system. The solar panel should be sufficient to charge the battery throughout the day and deliver some additional power for the Pi. We managed to get some old 250Wp panels which is more than enough to do the job (even when cloudy or rainy). We have one panel, one battery and one solar charger per Pi. The battery should have enough capacity to cover for at least 24hours, so in case of a 12V battery, you would need approx 20Ah. During the day (=when there is sun, which is in our case for approx 8 hours/day) you need 7w *8h = 56Wh for the Pi, and 240Wh to be charge the battery in worst case. So the solar panel should deliver approx 296Wh during 8 hours or 37w average, which is definitely doable, even when cloudy or rainy.

image

The solar charger has several USB outputs (make sure those have sufficient power, preferable 3A per port), and the Pi and 4G dongle are connected to those outputs. For the solar charger, check the max VoC (open circuit voltage) and max current to ensure compatibility with the solar panel.

Website Access

this was probably the most difficult and tricky part of the entire installation: each of the remote devices had to be accessible publicly. Since 4G connection works with shared IPs, there was not possibility to "forward" the traffic to those IP addresses, so we had to set up a VPN connection as described below.

image

A DNS or fixed public IP is needed to allow public clients to connect. In this set-up, it also helps for the remote Pi's to use this DNS to connect to the VPN server in my network. The right port forwarding needs to be done, so in this case specifically:

  • http connection (e.g. mydns:81 for Pi1 or mydns:82 for Pi2) are forwarded to the NAS. This NAS is also responsible for the VPN connection, so we've set up a reverse proxy rule in the NAS to redirect the traffic from e.g. port 81 to port 80 of the VPN IP of respective Pi.
  • VPN connection to be forward to the NAS

The NAS is running OpenVPN, and the set up with the certificates went relatively smooth. But the biggest challenge was to have fixed VPN IP's for each of the Pi's (in the standard config, the VPN IP's are randomly assigned). OpenVPN would allow to list static clients at the server side, but this setting was not possible in the NAS. So we had to rewrite the server configuration file of the NAS (which gets rewritten after each server restart...). In my case, the original file was located on /share/CACHEDEV1_DATA/.qpkg/QVPN/etc/init.d/vpn_openvpn.sh

In this file, I had to add: client-config-dir /etc/openvpn/staticclients username-as-common-name

and then make a staticclients directory in /ect/openvpn, where I would make a file with the name of the username, and add the text: ifconfig-push 10.8.0.11 255.255.255.0 (and thus another username and another IP for the other Pi's)

3. Bulk uploading your observations

Manual for Bulk Importing your BirdNet data to waarnemingen.be (or observation.org). Use this carefully! Don't blindly bulk upload your date. Check your observations and for uncommon or rare species, always check the audio files. Especially in the lower and higher frequencies, errors (= false positives) might occur. In case you're not confident, then don't upload. Be careful for single observations or rare species with only medium confidence level (everything < 95%).

  1. Download data from your BirdNet Pi device (Tools -> Database Maintenance; select period, and then export as csv file). Remove all duplicates (e.g. per day) with automatic filtering.

  2. Adjust your Excel settings (important, needed for Europe!) This will allow for correctly exported CSV file with comma’s.

  • Select File > Options > Advanced.
  • Clear the check box 'Use system settings'.
  • Set 'Decimal separator' to a point (dot), and 'Thousands separator' to a comma.
  • Click OK.
  1. Create a new, correctly formatted excel file. Suggest you make a master xls file which you can re-use at a later stage. Formatting as per addendum.

  2. Export your file as CSV

  3. Import your files in observation.org: for BE, this would be via this link: https://old.waarnemingen.be/import/ebird_import.php for other locations, this could be: https://old.observation.org/import/ebird_import.php change the first part of the url (observation.org) if needed

  4. When done, set your Excel settings back to the original settings:

  • Select File > Options > Advanced.
  • Tick the check box 'Use system settings'.
  • Click OK.

  The eBird import file has 23 columns : if you want to create a similar file to upload your data filed in another system. Make sure you have the same number of colums. The column devider is ',' Columns in red must be filled

  1. Submission ID , can be any number,text. is used to make a record unigue together with species, date and your user id. You can use your own codes

  2. Common Name , not used

  3. Scientific Name , used to select the species in [observation.org](https://observation.org/)

  4. Taxonomic Order , not used

  5. Count , number of individuals

  6. State/Province , not used

  7. County , not used

  8. Location_id , not used

  9. Location , not used

  10. Latitude , lat in decimal for example 52.0181171

  11. Longitude , lon in decimal for example 4.3786526

  12. Date , used in format mm-dd-yyyy

  13. Time , used in format hh:mm AM or PM for example 01:00 PM

  14. Protocol , only used for ebird to create checklists for protocol 'eBird - Stationary Count'

  15. Duration (Min) , only used for ebird to create end time for checklists

  16. All Obs Reported , only used for ebird imports

  17. Distance Traveled (km) , not used

  18. Area Covered (ha) , not used

  19. Number of Observers , not used

  20. Breeding Code , used see other table for possible codes

  21. Observation Details , not used

  22. Species Comments , used in observation remarks

  23. Checklist Comments , used in checklist comments if protocol = 'eBird - Stationary Count'

  24. ML catalog number , not used

Mandatory fields: Submission ID, Scientific Name, Count, Latitude, Longitude, Date, Time

Possible eBird breeding codes:

  1. NY Nest with Young
  2. NE Nest with Eggs
  3. ON Occupied Nest
  4. FL Recently Fledged young
  5. FY Feeding Young
  6. FS Carrying Fecal Sac
  7. CF Carrying Food
  8. UN Used Nest
  9. DD Distraction Display
  10. PE Brood Patch and Physiological Evidence
  11. NB Nest Building
  12. CN Carrying Nesting Material
  13. B Wren/Woodpecker Nest Building
  14. T Territory held for 7+ days
  15. C Courtship Display or Copulation
  16. N Visiting probable Nest site
  17. A Agitated behavior
  18. P Pair in Suitable Habitat
  19. M Multiple (7+) singing males
  20. S7 Singing Male Present 7+ Days
  21. S Singing male
  22. H In appropriate habitat
  23. F Flyover
Clone this wiki locally