Menu |
Prof /
NightMonv1NightMon - Allsky night monitorSoftware package for NightMon v1 Creative Commons Attribution-ShareAlike 4.0 International License IntroductionThe aim of this project is to develop a system capable of remotely controlling a night light monitoring allsky multiple cameras system with a raspberry pi 4b (RPI). As for the version 1, we use two cameras, one with Johnson V filter and the second with the Johnson R filter. This system is designed in the perspective of replacing the well known AstMon system. The linux distribution used for this system is Raspberry Pi OS (32-bit). We chose a development philosophy based on a complete control from the Linux command line. The system can be controlled simply with a low speed remote connection provided by a SSH client installed on the user workstation. The RPI connected to the system act as a server. Also to promote the implementation of measuring network, the data acquired by the NightMon is stored on a web server installed on the RPI. Thanks to that web server, the data from multiple NightMon units all around the world can be downloaded by a central server. Locally, the web server can be accessed with any portable device through a proprietary wifi network. SSH can also be accessed through this wifi network. How to access the NightMonFrom internet: ssh -p 2022 sand@router_public_ip or inside a private network ssh sand@servers_local_ip From the internet, port 2022 is used instead of standard port 22 to reduce risk of attacks by hackers. A password and user name is required. The standard username is sand. The system administrator should be able to provide you the password for sand. Hardware requirementsWe highly suggest to chose hardware components better or equivalent of this:
StorageThere are 53 MB of data stored on the microsd card every cycle of 15min. Which means 2.5 GB per day in average. The raw images and the jpeg images occupy the most of that space (more than 99%). The 128 GB card can then store about 50 days. The complete data will be kept untouched the last two weeks while raw and jpeg images between 2 weeks and 4 weeks will be compressed with gunzip. Older images will be erased from the microsd card. Files are copied on the backup USB stick. The USB stick being four times larger, we will keep 8 weeks of full data, data betwen 8 to 16 weeks old will be compressed and after that the raw and jpeg images will be erased from the USB stick. If you need to keep the raw data for a longer period, then it is mandatory to backup them elsewhere. Installing and configuring subsystemsBasic system installations and dependencies
sudo raspi-config
sudo apt install vim sudo apt install vim-common sudo apt install apache2 sudo apt install lm-sensors sudo apt install imagemagick sudo apt install ntp sudo apt install openssh-client sudo apt install openssh-server sudo apt install netpbm sudo apt install git sudo apt install python3-serial sudo apt install python3-dev sudo apt install python3-rpi.gpio sudo apt install python3-gpiozero sudo apt install bc sudo apt install iptables sudo apt install gparted sudo apt install gpsd sudo apt install gpsd-clients sudo apt install -y python3-kms++ python3-libcamera sudo apt install -y python3-pyqt5 python3-prctl libatlas-base-dev ffmpeg sudo apt install -y python3-picamera2 sudo pip install numpy --upgrade sudo pip install --system datetime sudo pip install pyyaml sudo pip install skyfield sudo pip install rawpy sudo pip install matplotlib sudo pip install datetime sudo pip install astropy sudo pip install photutils sudo pip install scipy sudo pip install LISC@git+https://github.com/alsimoneau/LISC.git Installing NightMon applicationsLatest available package release on github repository
cd mkdir git cd git git clone https://github.com/aubema/nightmon.git
sudo cp -f /home/sand/git/nightmon/*.py /usr/local/bin/ sudo cp -f /home/sand/git/nightmon/*.bash /usr/local/bin/ sudo chmod a+x /usr/local/bin/*
cp -f /home/sand/git/nightmon/ConfigFiles/* /home/sand
mkdir /home/sand/data Mount the usb stick on /home/sand/dataThe usb stick will be the support to backup all the data. The backup will be done at 9 AM UT. That will be managed by the crontab.
sudo lsblk You should see the usb drive on the sda1 drive
sudo umount /dev/sda1 sudo su echo "/dev/sda1 /home/sand/data vfat rw,user,exec,nofail,umask=000 0 0" >> /etc/fstab exit sudo reboot Notes:
SSHSSH server allows any remote SSH client to connect to the server to remotely control system programs from the command line or to download (upstream / downstream) data.
sudo raspi-config
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT sudo iptables-save I2Csudo raspi-config
GPS configuration
sudo vim /etc/default/gpsd
START_DAEMON="true" USBAUTO="true" DEVICES="/dev/ttyACM0" GPSD_OPTIONS="-F /var/run/gpsd.sock -n" UPS hat (optional)The UPS is a power battery backup. It will protect the system against power fluctuations and will allow the system to continue its ongoing tasks during short power failure.
sudo vim /etc/rc.local
/usr/local/bin/ups.sh & Reboot the computer sudo reboot After the reboot, the UPS must be online. Try to remove the power connector. If the UPS hat is working properly, it should stay on for 60 sec and then shutdown. If not, your UPS hat is probably defective. Automatic startup of observation script and data repository cleaning codesThis is the master code that operate the image acquisition and analysis. This code is started every 15 min using crontab
cd /home/sand/git/nightmon chmod a+x * sudo cp observe.service /etc/systemd/system sudo systemctl enable observe.service sudo systemctl start observe.service
sudo crontab -e
0 12 * * * /usr/local/bin/Clean_files.bash
exit Apache serverWe are using the Apache2 web server. This server allows browsing the database and look at the log file. To activate the web server, we must:
sudo a2enmod userdir sudo service apache2 restart
sudo mkdir /var/www/html/data sudo chmod a+rx /var/www/html/data
sudo vim /etc/apache2/apache2.conf
# added for nightmon <Directory /var/www/html/data> Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted </Directory>
sudo service apache2 restart Set up the wifi access point
sudo apt install hostapd
sudo systemctl unmask hostapd sudo systemctl enable hostapd
sudo apt install dnsmasq
sudo DEBIAN_FRONTEND=noninteractive apt install -y netfilter-persistent iptables-persistent Set up the network routerThe Raspberry Pi will run and manage a standalone wireless network. It will also route between the wireless and Ethernet network, providing internet access to wireless clients when the wired network interface is connected to the web. Define the wireless interface IP configurationThe Raspberry Pi runs a DHCP server for the wireless network; this requires static IP configuration for the wireless interface (wlan0) in the Raspberry Pi. The Raspberry Pi also acts as the router on the wireless network. We give the router the first IP address in the network: 192.168.5.1.
sudo vim /etc/dhcpcd.conf
interface wlan0 static ip_address=192.168.5.1/24 nohook wpa_supplicant Enable routing and IP masqueradingThis section configures the Raspberry Pi to let wireless clients access computers on the main (Ethernet) network, and from there, to access the internet (if the wired interface is connected to the web). NOTE: If you prefer to block wireless clients from accessing the Ethernet network and the internet, skip this section.
sudo vim /etc/sysctl.d/routed-ap.conf
# https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md # Enable IPv4 routing net.ipv4.ip_forward=1 Enabling routing will allow hosts from network 192.168.5.0/24 to reach the LAN and the main router towards the internet. In order to allow traffic between clients on this foreign wireless network and the internet without changing the configuration of the main router, the Raspberry Pi can substitute the IP address of wireless clients with its own IP address on the LAN using a "masquerade" firewall rule. The main router will see all outgoing traffic from wireless clients as coming from the Raspberry Pi, allowing communication with the internet. The Raspberry Pi will receive all incoming traffic, substitute the IP addresses back, and forward traffic to the original wireless client.
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo netfilter-persistent save Filtering rules are saved to the directory /etc/iptables/. If in the future you change the configuration of your firewall, make sure to save the configuration before rebooting. Configure the DHCP and DNS services for the wireless networkThe DHCP and DNS services are provided by dnsmasq. The default configuration file serves as a template for all possible configuration options, whereas we only need a few. It is easier to start from an empty file.
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig sudo vim /etc/dnsmasq.conf
interface=wlan0 # Listening interface dhcp-range=192.168.5.2,192.168.5.20,255.255.255.0,24h # Pool of IP addresses served via DHCP domain=wlan # Local wireless DNS domain address=/nightmon/192.168.5.1 # Alias for this router The Raspberry Pi will deliver IP addresses between 192.168.5.2 and 192.168.5.20, with a lease time of 24 hours, to wireless DHCP clients. There are many more options for dnsmasq; see the default configuration file (/etc/dnsmasq.conf) or the online documentation for details. Ensure wireless operationCountries around the world regulate the use of telecommunication radio frequency bands to ensure interference-free operation. The Linux OS helps users comply with these rules by allowing applications to be configured with a two-letter "WiFi country code", e.g. US for a computer used in the United States. In the Raspberry Pi OS, 5 GHz wireless networking is disabled until a WiFi country code has been configured by the user, usually as part of the initial installation process.
sudo rfkill unblock wlan This setting will be automatically restored at boot time. We will define an appropriate country code in the access point software configuration, next. Configure the access point
sudo vim /etc/hostapd/hostapd.conf
country_code=CA interface=wlan0 ssid=nightmon hw_mode=g channel=7 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=nightmonwifi wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP Note the line country_code=CA: it configures the computer to use the correct wireless frequencies in Canada. Adapt this line and specify the two-letter ISO code of your country. See Wikipedia for a list of two-letter ISO 3166-1 country codes. To use the 5 GHz band, you can change the operations mode from hw_mode=g to hw_mode=a. Possible values for hw_mode are: a = IEEE 802.11a (5 GHz) b = IEEE 802.11b (2.4 GHz) g = IEEE 802.11g (2.4 GHz) ad = IEEE 802.11ad (60 GHz) Run your new wireless access point
sudo systemctl reboot Once your Raspberry Pi has restarted, search for wireless networks with your wireless client. The network SSID nightmon should now be present, and it should be accessible with the password nightmonwifi. If SSH is enabled on the Raspberry Pi, it should be possible to connect to it from your wireless client as follows, assuming the pi account is present: ssh sand@192.168.5.1 or ssh sand@nightmon Configure the network parameters of the raspberry pi
sudo vim /etc/dhcpcd.conf
# Example static IP configuration: interface eth0 static ip_address=192.168.0.100/24 static ip6_address=fd51:42f8:caae:d92e::ff/64 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1 Real time clockWe are using the DS3231 RTC module to keep the date and time after powering off the system.
sudo i2cdetect -y 1 If you have successfully wired up your RTC circuit, you should see the ID #68 appear. This id is the address of the DS3231 RTC Chips. Once we have the Kernel driver up and running the tool will start to display UU instead, this is an indication that it is working as intended. Setting up the Raspberry Pi RTC TimeWith I2C successfully setup and verified that we could see our RTC circuit then we can begin the process of configuring the Raspberry Pi to use our RTC Chip for its time.
sudo vim /boot/config.txt
dtoverlay=i2c-rtc,ds3231 Once you have added the correct line for your device to the bottom of the file you can save and quit out of it by pressing Esc, then :wq and then Enter. With that change made we need to restart the Raspberry Pi, so it loads in the latest configuration changes.
sudo reboot
sudo i2cdetect -y 1 You should see a wall of text appear, if UU appears instead of 68 then we have successfully loaded in the Kernel driver for our RTC circuit. Now that we have successfully got the kernel driver activated for the RTC Chip and we know it’s communicating with the Raspberry Pi, we need to remove the fake hwclock package. This package acts as a placeholder for the real hardware clock when you don’t have one.
sudo apt-get -y remove fake-hwclock sudo update-rc.d -f fake-hwclock remove Now that we have disabled the fake-hwclock package we can proceed with getting the original hardware clock script that is included in Raspbian up and running again by commenting out a section of code.
sudo vim /lib/udev/hwclock-set If you upgrade the operating system, you may need to redo the following step.
Syncing time from the Pi to the RTC moduleNow that we have our RTC module all hooked up and Raspbian and the Raspberry Pi configured correctly we need to synchronize the time with our RTC Module. The reason for this is that the time provided by a new RTC module will be incorrect.
sudo hwclock -D -r
date
sudo hwclock -w
sudo hwclock -r Syncing the Pi to the RTC on startup
sudo timedatectl set-ntp 1 The activation of the ntp clock sync will not affect the RTC clock sync when the internet is unplugged.
sudo hwclock --set --date "8/11/2013 23:10:45" sudo hwclock -s You can make sure that it worked by typing:
date
sudo vim /etc/rc.local and by adding the following line to the file just before the "exit 0":
sudo hwclock -s Once you have made the change, save the file by pressing Esc then :wq then Enter.
sudo reboot Now, you should hopefully now have a fully operational RTC module that is actively keeping your Raspberry Pi’s time correct even when it loses power or loses an internet connection. System rebootNow all the relevant software are installed, in order to activate all newly added functionalities, restart the computer. Optional stuffD-LINK router configurationThe router is useful when NightMon is connected to the Internet and that the appropriate ports are open to take control of the instrument remotely. If the system is not connected to the internet, a simple network switch or hub is sufficient.
|