2 #+TITLE: Ninfacyzga-01 Manual
 
   3 #+AUTHOR: Steven Baltakatei Sandoval
 
   4 #+EMAIL: baltakatei@gmail.com
 
   6 This document was created by Steven Baltakatei Sandoval on
 
   7 ~2020-06-29T12:14Z~ under a [[https://creativecommons.org/licenses/by-sa/4.0/][Creative Commons BY-SA 4.0 license]]. It
 
   8 was updated by Steven Baltakatei Sandoval on ~2020-10-16T22:33Z~
 
  11 Ninfacyzga-01 records (logs) its position in time and space using a
 
  12 [[https://en.wikipedia.org/wiki/Satellite_navigation_device][GPS receiver]]. The NMEA location data produced by the receiver is
 
  13 converted into the more commonly used GPS data storage formats of GPX
 
  14 and KML. All three types of data are then compressed and encrypted
 
  15 against a set of public keys. The encrypted data is then written to
 
  16 disk. Data produced by the receiver is segmented into 60-second chunks
 
  17 before being processed and written to disk.
 
  20 **** Raspberry Pi Zero W
 
  21 See the [[https://www.raspberrypi.org/pi-zero-w/][OEM]] webpage for this product.
 
  23 See the [[https://alchemy-power.com/piz-uptime-2-0/][OEM]] webpage for this product.
 
  25 ~bklog~ : A bash script that saves its stdin stream to a tar file. The
 
  26 file may be compressed by ~gzip~ and encrypted by ~age~. It is an
 
  27 executable file contained within this repository at ~exec/bklog~. It
 
  28 should be copied to ~$HOME/.local/bin~.
 
  30 [[https://tracker.debian.org/pkg/gpsd][~gpsd~]] : A background daemon app capable of interfacing with the
 
  31 [[https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/][Ozzmaker BerryGPS-IMU]]'s GPS submodule. Installed and initialized by
 
  32 ~apt~. Should be installed along with the ~gpsd-clients~ package.
 
  34 ~gpspipe~ : A command line app that polls ~gpsd~ and produces a stream
 
  35 stdout consisting of GPS data lines in NMEA format. Installed via
 
  38 ~gpsbabel~ : A command line app that converts GPS data from one format
 
  39 into another. ~bklog~ may be used to convert NMEA data into GPX and
 
  40 KML. Installed via ~apt~.
 
  42 ~gzip~ : A simple command line app that compresses stdin into a
 
  43 smaller stdout stream.
 
  45 ~age~ : A simple command line app that encrypts stdin against public
 
  46 keys specified in its options. Produces encrypted stdout. Is an
 
  47 executable file contained within this repository at ~exec/age~. It
 
  48 should be copied to ~$HOME/.local/bin~.
 
  51 ~bklog~ may be used to log location data by receiving stdout produced
 
  52 by ~gpspipe~. ~bklog~ contains options that allow file writes to be
 
  53 performed at adjustable time intervals (default: 300 seconds),
 
  54 compressed (with ~gzip~), and encrypted (with ~age~). Files are
 
  55 written in the form of appendages to a ~tar~ archive saved to a
 
  56 specified location. The NMEA data produced by ~gpspipe~ may be
 
  57 processed via a ~gpsbabel~ command string specified as an option to
 
  58 ~bklog~, assuming ~gpsbabel~ is installed.
 
  62 Several output file formats have been tested with ~bklog~.
 
  66 ~NMEA~ is an acronym for National marine Electronics Association. The
 
  67 NMEA format described in this document follows the NMEA 0183
 
  68 standard. It is a newline-delimited streaming text format that encodes
 
  69 global positioning system (GPS) data such as WGS84 location, time and
 
  70 date information, satellite count, accuracy, and other
 
  71 information. Each line is an "NMEA sentence". Descriptions of various
 
  72 NMEA sentences can be found on [[http://aprs.gids.nl/nmea/][this]] webpage.
 
  74 See the [[https://en.wikipedia.org/wiki/NMEA_0183][Wikipedia page for NMEA 0183]] for this. This file format is the
 
  75 default output of the ~gpspipe -r~ command.
 
  77 See the [[https://en.wikipedia.org/wiki/GPS_Exchange_Format][Wikipedia page]] for this. [[http://wiki.gis.com/wiki/index.php/WGS84][WGS84]] is the datum used. An NMEA file
 
  78 may be converted to this format using ~gpsbabel~.
 
  80 See the [[https://en.wikipedia.org/wiki/Keyhole_Markup_Language][Wikipedia page]] for this. [[http://wiki.gis.com/wiki/index.php/WGS84][WGS84]] is the datum used. An NMEA file
 
  81 may be converted to this format using ~gpsbabel~.
 
  83 **** Encryption Method
 
  84 See [[file:../setup/README.org][Main Setup]] procedures.
 
  86 ** Operating Procedures
 
  88 See OEM (Ozzmaker) [[https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/][quickstart guide for the BerryGPS-IMU]].
 
  91 BerryGPS-IMU must be electrically connected to the correct pins on the
 
  92 GPIO header of a Raspberry Pi Zero W.
 
  94 *Optional*: stack together with PiZ Uptime 2.0 module. No GPIO pins
 
  95 conflict so a simple stacking and soldering with long header pins is
 
  99 ***** Install Executables
 
 100 Follow the [[file:../setup/README.org][Main Setup]] procedures to obtain required files from this
 
 103 Install ~gpsd~, ~gpsd-clients~, and ~gpsbabel~.
 
 105 : $ sudo apt install gpsd gpsd-clients gpsbabel
 
 107 ***** Setup Serial for BerryGPS
 
 108 The Ozzmaker BerryGPS-IMU unit requires that the serial console be
 
 109 disabled and the serial port enabled. (see [[https://ozzmaker.com/berrygps-setup-guide-raspberry-pi/][ref]]).
 
 111 : $ sudo raspi-config
 
 113 Navigate to ~5 Interfacing Options~, then ~P6 Serial~.
 
 115 When prompted "Would you like a login shell to be accessible over
 
 116 serial?", answer ~No~.
 
 118 When prompted "Would you like the serial port hardware to be
 
 119 enabled?", answer ~Yes~.
 
 122 ~gpsd~ needs to know which serial port to look at for NMEA location
 
 123 data generated by the GPS unit. This can be done by modifying the
 
 124 ~gpsd~ configuration file at ~/etc/default/gpsd~.
 
 126 : sudo nano /etc/default/gpsd
 
 128 Make sure the following lines are present:
 
 133 DEVICES="/dev/ttyAMA0"
 
 137 NOTE: The ~DEVICES=~ line must be adjusted if the the ~ninfacyzga~
 
 138 device is configured to also track time.
 
 140 NOTE: The ~-n~ option causes ~gpsd~ to begin polling GPS devices
 
 141 without waiting for a client to connect. This is important if ~gpsd~
 
 142 provides data to other applications (ex: ~gpspipe~, ~ntpsec~,
 
 147 : $ sudo systemctl restart gpsd.service
 
 149 Run ~gpsmon~ to verify that location data is being recorded.
 
 153 ***** Automatic Start Configuration
 
 154 It is recommended to create a daily ~cron~ job that executes a bash
 
 155 script that starts ~bklog~ jobs to record location along with other
 
 156 types of data recording. An example of such a script is below:
 
 162 gpspipe -r | /bin/bash "$HOME/.local/bin/bklog" -c -e -z "UTC" -t "/dev/shm" \
 
 163           -r age1kza7pfshy7xwygf9349zgmk7x53mquvedgw9r98qwyyqhssh830qqjzlsw \
 
 164           -r age1ce3pvzrqfcn2pc6zqzglc8ac8yjk3fzukpy08cesqjjwns53xywqmaq7xw \
 
 165           -R "$HOME/.config/bklog/recipients" -w ".nmea" -b "300" -B "day" \
 
 166           -o "$HOME/Sync/Evanescent_Location" -l "location" \
 
 167           -p "gpsbabel -i nmea -f - -o gpx -F - " ".gpx" \
 
 168           -p "gpsbabel -i nmea -f - -o kml -F - " ".kml" &
 
 170 python ~/.local/bin/bmp388.py | /bin/bash "$HOME/git-OC/ninfacyzga-01/exec/bklog" \
 
 171           -c -e -z "UTC" -t "/dev/shm" \
 
 172           -r age1kza7pfshy7xwygf9349zgmk7x53mquvedgw9r98qwyyqhssh830qqjzlsw \
 
 173           -r age1ce3pvzrqfcn2pc6zqzglc8ac8yjk3fzukpy08cesqjjwns53xywqmaq7xw \
 
 174           -R "$HOME/.config/bklog/recipients" -w ".txt" -b "300" -B "day" \
 
 175           -o "$HOME/Sync/Evanescent_Location" -l "pressure" &
 
 178 This script, if it were saved at
 
 179 ~"$HOME/.local/bin/cron/dailylog.sh"~ would then be added as a
 
 180 line in the ~crontab~ file as shown below:
 
 184 0 0 * * * /bin/bash ~/.local/bin/cron/dailylog.sh
 
 185 @reboot /bin/bash ~/.local/bin/cron/dailylog.sh
 
 188 In the example script, the options are:
 
 190 : -c : tells bklog to compress output
 
 191 : -e : tells bklog log to encrypt output
 
 192 : -r : tells bklog to interpret the next argument as a pubkey string
 
 193 : -R : tells bklog to interpret the next argument as a directory
 
 194 :        where public keys may be found (first line of each file is
 
 196 : -o : tells bklog to write output files to the directory represented
 
 197 : -t : tells bklog to interpret the next argument as a directory
 
 198 :        for storing temporary files
 
 199 :        by the next argument
 
 200 : -p : tells bklog a command string through which output is piped
 
 201 :        before being compressed and encrypted. Also expected is a
 
 202 :        file extension to be appended before the compression and
 
 203 :        encryption file extensions.
 
 204 : -w : tells bklog to save the unprocessed stdin with a specified
 
 205 :        file extension (instead of the default '.stdin').
 
 206 : -b : tells bklog how long each buffer round (time between file
 
 207 :        writes) lasts in seconds.
 
 208 : -B : specifies the time-to-live for the bklog script. A valid value may
 
 209 :        one of the time elements such as "day" or "hour".
 
 210 : -l : specfies a custom string to be used in output file names to
 
 211 :        help differentiate tar files produced via bklog from different
 
 213 : -z : specifies a time zone to be used to determine the script time-to-live.
 
 214 :        By default, bklog uses whatever time is specified by the TZ
 
 215 :        environment variable.
 
 217 ***** Log Transfer Configuration
 
 218 See [[file:../setup/README.org][Main Setup]] procedures.
 
 220 Log files may be shared to other machines via ~syncthing~. See [[https://docs.syncthing.net/][this]]
 
 221 manual for how to set up a shared folder and add Ninfacyzga-01 as a
 
 222 device. Syncthing's directory synchronization capability allows a
 
 223 remote machine to delete files from Ninfacyzga-01 by deleting from the
 
 224 shared folder that they both share.
 
 226 When log files are removed from Ninfacyzga-01 is not within the scope
 
 230 See [[file:../setup/README.org][Main Setup]] procedures.
 
 233 Turn on Ninfacyzga-01 by supplying 5VDC power to the Raspberry Pi. No
 
 234 further interaction should be required.
 
 236 No interaction beyond continually supplying approximately 100mA of
 
 237 5VDC power and occasionally removing log files to conserve disk space
 
 240 Log files may be transferred by use of ~syncthing~ shared folders.
 
 241 **** Automatic Updates
 
 242 The ~automatic-upgrades~ package, if installed, should automatically
 
 243 install security patches to packages installed via ~apt~.
 
 245 The system may be shutdown via SSH by running:
 
 247 : $ sudo shutdown -r 0
 
 249 *** Unscheduled Shutdown
 
 250 Ninfacyzga-01 as described and setup should tolerate unscheduled power
 
 251 loss. Log files being written every 60 seconds means, at most, 60
 
 252 seconds worth of location data may be lost.
 
 253 *** End of Life Disposal
 
 254 See [[file:../setup/README.org][Main Setup]] procedures.