feat(exec/temperature):Add poll py script, update README
[EVA-2020-02.git] / doc / location / README.org
CommitLineData
170f63ba 1* Location Logging
f7628e90
SBS
2#+TITLE: Ninfacyzga-01 Manual
3#+AUTHOR: Steven Baltakatei Sandoval
f7628e90 4#+EMAIL: baltakatei@gmail.com
7b09912b
SBS
5** About
6This document was created by Steven Baltakatei Sandoval on
fffd9f66
SBS
7~2020-06-29T12:14Z~ under a [[https://creativecommons.org/licenses/by-sa/4.0/][Creative Commons BY-SA 4.0 license]]. It was
8updated by Steven Baltakatei Sandoval on ~2020-10-18T00:13Z~
7b09912b 9
170f63ba
SBS
10** Narrative
11Ninfacyzga-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
13converted into the more commonly used GPS data storage formats of GPX
14and KML. All three types of data are then compressed and encrypted
15against a set of public keys. The encrypted data is then written to
16disk. Data produced by the receiver is segmented into 60-second chunks
17before being processed and written to disk.
18** Description
19*** Hardware
20**** Raspberry Pi Zero W
21See the [[https://www.raspberrypi.org/pi-zero-w/][OEM]] webpage for this product.
22**** PiZ UpTime 2.0
23See the [[https://alchemy-power.com/piz-uptime-2-0/][OEM]] webpage for this product.
24*** Software
aedd19f6
SBS
25~bklog~ : A bash script that saves its stdin stream to a tar file. The
26file may be compressed by ~gzip~ and encrypted by ~age~. It is an
27executable file contained within this repository at ~exec/bklog~. It
28should be copied to ~$HOME/.local/bin~.
29
88b5ae54
SBS
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.
170f63ba
SBS
33
34~gpspipe~ : A command line app that polls ~gpsd~ and produces a stream
35stdout consisting of GPS data lines in NMEA format. Installed via
36~apt~.
37
38~gpsbabel~ : A command line app that converts GPS data from one format
aedd19f6 39into another. ~bklog~ may be used to convert NMEA data into GPX and
170f63ba
SBS
40KML. Installed via ~apt~.
41
42~gzip~ : A simple command line app that compresses stdin into a
43smaller stdout stream.
44
45~age~ : A simple command line app that encrypts stdin against public
46keys specified in its options. Produces encrypted stdout. Is an
47executable file contained within this repository at ~exec/age~. It
48should be copied to ~$HOME/.local/bin~.
49
50**** Narrative
aedd19f6
SBS
51~bklog~ may be used to log location data by receiving stdout produced
52by ~gpspipe~. ~bklog~ contains options that allow file writes to be
53performed at adjustable time intervals (default: 300 seconds),
54compressed (with ~gzip~), and encrypted (with ~age~). Files are
55written in the form of appendages to a ~tar~ archive saved to a
56specified location. The NMEA data produced by ~gpspipe~ may be
57processed via a ~gpsbabel~ command string specified as an option to
58~bklog~, assuming ~gpsbabel~ is installed.
170f63ba
SBS
59
60*** Output
aedd19f6
SBS
61
62Several output file formats have been tested with ~bklog~.
63
170f63ba
SBS
64**** File Formats
65***** NMEA
ebeb4cb3
SBS
66~NMEA~ is an acronym for National marine Electronics Association. The
67NMEA format described in this document follows the NMEA 0183
68standard. It is a newline-delimited streaming text format that encodes
69global positioning system (GPS) data such as WGS84 location, time and
70date information, satellite count, accuracy, and other
71information. Each line is an "NMEA sentence". Descriptions of various
72NMEA sentences can be found on [[http://aprs.gids.nl/nmea/][this]] webpage.
73
74See the [[https://en.wikipedia.org/wiki/NMEA_0183][Wikipedia page for NMEA 0183]] for this. This file format is the
75default output of the ~gpspipe -r~ command.
170f63ba 76***** GPX
aedd19f6
SBS
77See 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
78may be converted to this format using ~gpsbabel~.
170f63ba 79***** KML
aedd19f6
SBS
80See 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
81may be converted to this format using ~gpsbabel~.
82
170f63ba 83**** Encryption Method
7b09912b 84See [[file:../setup/README.org][Main Setup]] procedures.
aedd19f6 85
170f63ba
SBS
86** Operating Procedures
87*** Initial Startup
27a8996a 88See OEM (Ozzmaker) [[https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/][quickstart guide for the BerryGPS-IMU]].
27a8996a
SBS
89**** Physical Setup
90
91BerryGPS-IMU must be electrically connected to the correct pins on the
92GPIO header of a Raspberry Pi Zero W.
93
94*Optional*: stack together with PiZ Uptime 2.0 module. No GPIO pins
95conflict so a simple stacking and soldering with long header pins is
96possible.
97
98**** Software Setup
27a8996a 99***** Install Executables
ef3c23a1
SBS
100Follow the [[file:../setup/README.org][Main Setup]] procedures to obtain required files from this
101repository.
102
ce11ca44 103Install ~gpsd~, ~gpsd-clients~, and ~gpsbabel~.
27a8996a 104
ce11ca44 105: $ sudo apt install gpsd gpsd-clients gpsbabel
27a8996a 106
b9a2869d
SBS
107***** Setup Serial for BerryGPS
108The Ozzmaker BerryGPS-IMU unit requires that the serial console be
109disabled and the serial port enabled. (see [[https://ozzmaker.com/berrygps-setup-guide-raspberry-pi/][ref]]).
110
111: $ sudo raspi-config
112
113Navigate to ~5 Interfacing Options~, then ~P6 Serial~.
114
115When prompted "Would you like a login shell to be accessible over
116serial?", answer ~No~.
117
118When prompted "Would you like the serial port hardware to be
119enabled?", answer ~Yes~.
120
88b5ae54 121***** Setup ~gpsd~
b9a2869d
SBS
122~gpsd~ needs to know which serial port to look at for NMEA location
123data generated by the GPS unit. This can be done by modifying the
124~gpsd~ configuration file at ~/etc/default/gpsd~.
125
126: sudo nano /etc/default/gpsd
127
88b5ae54
SBS
128Make sure the following lines are present:
129
130#+BEGIN_EXAMPLE
131START_DAEMON="true"
132USBAUTO="false"
133DEVICES="/dev/ttyAMA0"
134GPSD_OPTIONS="-n"
135#+END_EXAMPLE
136
137NOTE: The ~DEVICES=~ line must be adjusted if the the ~ninfacyzga~
fffd9f66 138device is configured to also track time. (See [[file:../time/README.org::*Setup%20~gpsd~][ref]]).
88b5ae54
SBS
139
140NOTE: The ~-n~ option causes ~gpsd~ to begin polling GPS devices
141without waiting for a client to connect. This is important if ~gpsd~
1b0ddef8 142provides data to other applications (ex: ~gpspipe~, ~chrony~).
88b5ae54 143
fffd9f66
SBS
144Enable ~gpsd~ to run automatically via:
145
146: $ sudo systemctl enable gpsd
147
88b5ae54 148Restart ~gpsd~ via:
b9a2869d 149
fffd9f66 150: $ sudo systemctl restart gpsd
b9a2869d 151
88b5ae54 152Run ~gpsmon~ to verify that location data is being recorded.
b9a2869d 153
88b5ae54 154: $ gpsmon
b9a2869d 155
27a8996a 156***** Automatic Start Configuration
aedd19f6
SBS
157It is recommended to create a daily ~cron~ job that executes a bash
158script that starts ~bklog~ jobs to record location along with other
159types of data recording. An example of such a script is below:
27a8996a
SBS
160
161#+BEGIN_EXAMPLE
aedd19f6
SBS
162#!/bin/bash
163
164# Log location
165gpspipe -r | /bin/bash "$HOME/.local/bin/bklog" -c -e -z "UTC" -t "/dev/shm" \
166 -r age1kza7pfshy7xwygf9349zgmk7x53mquvedgw9r98qwyyqhssh830qqjzlsw \
167 -r age1ce3pvzrqfcn2pc6zqzglc8ac8yjk3fzukpy08cesqjjwns53xywqmaq7xw \
168 -R "$HOME/.config/bklog/recipients" -w ".nmea" -b "300" -B "day" \
169 -o "$HOME/Sync/Evanescent_Location" -l "location" \
170 -p "gpsbabel -i nmea -f - -o gpx -F - " ".gpx" \
171 -p "gpsbabel -i nmea -f - -o kml -F - " ".kml" &
172# Log pressure
173python ~/.local/bin/bmp388.py | /bin/bash "$HOME/git-OC/ninfacyzga-01/exec/bklog" \
174 -c -e -z "UTC" -t "/dev/shm" \
175 -r age1kza7pfshy7xwygf9349zgmk7x53mquvedgw9r98qwyyqhssh830qqjzlsw \
176 -r age1ce3pvzrqfcn2pc6zqzglc8ac8yjk3fzukpy08cesqjjwns53xywqmaq7xw \
177 -R "$HOME/.config/bklog/recipients" -w ".txt" -b "300" -B "day" \
178 -o "$HOME/Sync/Evanescent_Location" -l "pressure" &
27a8996a
SBS
179#+END_EXAMPLE
180
aedd19f6
SBS
181This script, if it were saved at
182~"$HOME/.local/bin/cron/dailylog.sh"~ would then be added as a
183line in the ~crontab~ file as shown below:
b11c81de
SBS
184
185#+BEGIN_EXAMPLE
aedd19f6
SBS
186$ crontab -e
1870 0 * * * /bin/bash ~/.local/bin/cron/dailylog.sh
188@reboot /bin/bash ~/.local/bin/cron/dailylog.sh
b11c81de
SBS
189#+END_EXAMPLE
190
aedd19f6
SBS
191In the example script, the options are:
192
193: -c : tells bklog to compress output
194: -e : tells bklog log to encrypt output
195: -r : tells bklog to interpret the next argument as a pubkey string
196: -R : tells bklog to interpret the next argument as a directory
197: where public keys may be found (first line of each file is
198: read).
199: -o : tells bklog to write output files to the directory represented
200: -t : tells bklog to interpret the next argument as a directory
201: for storing temporary files
b11c81de 202: by the next argument
aedd19f6
SBS
203: -p : tells bklog a command string through which output is piped
204: before being compressed and encrypted. Also expected is a
205: file extension to be appended before the compression and
206: encryption file extensions.
207: -w : tells bklog to save the unprocessed stdin with a specified
208: file extension (instead of the default '.stdin').
209: -b : tells bklog how long each buffer round (time between file
210: writes) lasts in seconds.
211: -B : specifies the time-to-live for the bklog script. A valid value may
212: one of the time elements such as "day" or "hour".
213: -l : specfies a custom string to be used in output file names to
214: help differentiate tar files produced via bklog from different
215: sources of data.
216: -z : specifies a time zone to be used to determine the script time-to-live.
217: By default, bklog uses whatever time is specified by the TZ
218: environment variable.
b11c81de 219
27a8996a 220***** Log Transfer Configuration
7b09912b
SBS
221See [[file:../setup/README.org][Main Setup]] procedures.
222
27a8996a
SBS
223Log files may be shared to other machines via ~syncthing~. See [[https://docs.syncthing.net/][this]]
224manual for how to set up a shared folder and add Ninfacyzga-01 as a
225device. Syncthing's directory synchronization capability allows a
226remote machine to delete files from Ninfacyzga-01 by deleting from the
227shared folder that they both share.
228
229When log files are removed from Ninfacyzga-01 is not within the scope
230of this document.
231
232***** Key Generation
7b09912b 233See [[file:../setup/README.org][Main Setup]] procedures.
27a8996a 234
170f63ba 235*** Normal Startup
27a8996a
SBS
236Turn on Ninfacyzga-01 by supplying 5VDC power to the Raspberry Pi. No
237further interaction should be required.
238*** Normal Operation
239No interaction beyond continually supplying approximately 100mA of
2405VDC power and occasionally removing log files to conserve disk space
241is required.
242**** Log Transfer
243Log files may be transferred by use of ~syncthing~ shared folders.
244**** Automatic Updates
245The ~automatic-upgrades~ package, if installed, should automatically
246install security patches to packages installed via ~apt~.
170f63ba 247*** Normal Shutdown
27a8996a
SBS
248The system may be shutdown via SSH by running:
249
250: $ sudo shutdown -r 0
251
170f63ba 252*** Unscheduled Shutdown
27a8996a
SBS
253Ninfacyzga-01 as described and setup should tolerate unscheduled power
254loss. Log files being written every 60 seconds means, at most, 60
255seconds worth of location data may be lost.
170f63ba 256*** End of Life Disposal
7b09912b 257See [[file:../setup/README.org][Main Setup]] procedures.