Add 'Things to Do' section
This commit is contained in:
		
							parent
							
								
									e56084a293
								
							
						
					
					
						commit
						ef3ee91d40
					
				
							
								
								
									
										7
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Makefile
									
									
									
									
									
								
							@ -1,11 +1,14 @@
 | 
			
		||||
archive.pdf: intro.pdf requirements.pdf design-doc.pdf \
 | 
			
		||||
    binary/techreview-ryan.pdf techreview-daniel.pdf binary/techreview-matt.pdf \
 | 
			
		||||
    binary/blog-ryan.pdf blog-daniel.pdf binary/blog-matt.pdf \
 | 
			
		||||
    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf
 | 
			
		||||
    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf todo.pdf
 | 
			
		||||
	pdfjam --no-tidy --outfile archive.pdf -- intro.pdf requirements.pdf design-doc.pdf \
 | 
			
		||||
	    binary/techreview-ryan.pdf techreview-daniel.pdf binary/techreview-matt.pdf \
 | 
			
		||||
	    binary/blog-ryan.pdf blog-daniel.pdf binary/blog-matt.pdf \
 | 
			
		||||
	    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf
 | 
			
		||||
	    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf todo.pdf
 | 
			
		||||
 | 
			
		||||
todo.pdf: todo.tex
 | 
			
		||||
	pdflatex todo.tex
 | 
			
		||||
 | 
			
		||||
listings.pdf: listings.tex
 | 
			
		||||
	pdflatex listings.tex
 | 
			
		||||
 | 
			
		||||
@ -125,7 +125,7 @@ above) would be to add to the collar a physical indication of whether or not it
 | 
			
		||||
boundary (see the Design Document below for an idea of what that is). This physical indication can be
 | 
			
		||||
an LED light, but the final goal would be to have that indication be a buzzer or an eletric shock.
 | 
			
		||||
 | 
			
		||||
The gateway software is capable of receiving and configuring a single collar device (See Appendix 1
 | 
			
		||||
The gateway software is capable of receiving and configuring a single collar device (See Appendix 4
 | 
			
		||||
for an explanation of why only a single device is currently supported). The next step for the 
 | 
			
		||||
gateway software, then, is to add support for multiple collar devices. Additionally, the gateway
 | 
			
		||||
software currently uses the Things Network to decode and process LoRaWAN packets. This is less
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										105
									
								
								todo.tex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								todo.tex
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
			
		||||
\documentclass[10pt, draftclsnofoot,onecolumn, compsoc]{IEEEtran}
 | 
			
		||||
 | 
			
		||||
\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
 | 
			
		||||
\let\endchangemargin=\endlist
 | 
			
		||||
 | 
			
		||||
\usepackage{setspace}
 | 
			
		||||
\usepackage{listings}
 | 
			
		||||
\linespread{1}
 | 
			
		||||
 | 
			
		||||
\title{Appendix 4: Work to be Done}
 | 
			
		||||
 | 
			
		||||
\begin{document}
 | 
			
		||||
\maketitle
 | 
			
		||||
 | 
			
		||||
\section*{Android Application}
 | 
			
		||||
The Android application requires only some minor touch-ups. In particular,
 | 
			
		||||
it would be good to add more graphs / visualizations of the collar data.
 | 
			
		||||
The majority of the data processing should be done on the server;
 | 
			
		||||
the application should merely display this data. Thus, implementing
 | 
			
		||||
this feature would have to be done in tandem with adjusting
 | 
			
		||||
the server to generate more statistics.
 | 
			
		||||
 | 
			
		||||
The application could also use some custom icons. The icons
 | 
			
		||||
used on the map for collars and polygon vertices are the default
 | 
			
		||||
ones provided by the \texttt{OSMDroid} library, and look pretty bad.
 | 
			
		||||
Consider replacing with custom SVG graphics.
 | 
			
		||||
 | 
			
		||||
It might be a good idea to allow the user to configure their API
 | 
			
		||||
URL rather than hardcoding it in \texttt{resources.xml}. Perhaps
 | 
			
		||||
the login screen should present a third input box which the user
 | 
			
		||||
can fill with their system's API URL. This means a single
 | 
			
		||||
Android application will work for several independent grazing systems.
 | 
			
		||||
 | 
			
		||||
\section*{API Server}
 | 
			
		||||
The gateway server should be modified to generate some more statistics,
 | 
			
		||||
and send these statistics to the Android application. It could
 | 
			
		||||
be useful to rewrite the Flask module using the application factory
 | 
			
		||||
pattern, but this would not add to functionality and should be 
 | 
			
		||||
considered low priority.
 | 
			
		||||
 | 
			
		||||
Some thought could be put in into how the server handles authentication
 | 
			
		||||
tokens. Currently, they only contain the user ID, and thus, assuming
 | 
			
		||||
the same ``secret passphrase", a user will always have the same API
 | 
			
		||||
token. It's not uncommon for these tokens to be leaked; most
 | 
			
		||||
systems deal with this by allowing the user to invalidate their
 | 
			
		||||
access token and generate a new one. This can be achieved in the Fenceless
 | 
			
		||||
Grazing System by adding a ``generation" field to the JSON body
 | 
			
		||||
of the JWT token, and tracking the ``valid generation" in the database.
 | 
			
		||||
This would greatly improve security.
 | 
			
		||||
 | 
			
		||||
\section*{Gateway Software}
 | 
			
		||||
The gateway software should be updated to use the SQLAlchemy model
 | 
			
		||||
definitions used in the API Server. This would remove the need
 | 
			
		||||
for writing raw SQL queries, and thereby simplify the code.
 | 
			
		||||
 | 
			
		||||
Although The Things Network is used in this iteration of the project
 | 
			
		||||
to decode LoRaWAN packets, we do not think this solution is ideal.
 | 
			
		||||
First of all, this requires the server to be connected to the Internet,
 | 
			
		||||
and makes the server unable to decode incoming transmissions from
 | 
			
		||||
the collars when network connection drops. Furthermore, this
 | 
			
		||||
makes our project forward data through The Things Network,
 | 
			
		||||
which can be a security or privacy concern. We understand that many
 | 
			
		||||
users do not want their data to be piped through a third-party system.
 | 
			
		||||
This change is rather difficult, however, due to the fact that there
 | 
			
		||||
is (at the time of writting) little support for LoRaWAN. It might
 | 
			
		||||
be necessary to follow the LoRaWAN spec and implement a custom packet
 | 
			
		||||
decoder and handler, as well as custom LoRaWAN Network Access Point software.
 | 
			
		||||
 | 
			
		||||
The Gateway's current interaction with the with the collars is done
 | 
			
		||||
by pushing data to The Things Network's API endpoints. The Things Network
 | 
			
		||||
requries that the project manually defines an endpoint for every client
 | 
			
		||||
device (in our case, for every collar). Since we only have one collar,
 | 
			
		||||
we only defined one endpoint. This means that there is currently no logic
 | 
			
		||||
to translate a collar identifier (internal to our system) to an API endpoint
 | 
			
		||||
(used by TTN). Since this system aims to support many concurrent collar connections,
 | 
			
		||||
such a translation layer should be added, perhaps in the form of a database table.
 | 
			
		||||
Note that this is specific to The Things Network, and moving away from TTN would
 | 
			
		||||
make this change pointless.
 | 
			
		||||
 | 
			
		||||
\section*{Collar Firmware}
 | 
			
		||||
The collar is currently pushing its underlying hardware quite far; the ATmega chip
 | 
			
		||||
used by the LoRa hardware does not have a lot of application memory, and our
 | 
			
		||||
use of LoRaWAN, GPS, and Protobuf has put a significant strain on it. We have already
 | 
			
		||||
struggled with including libraries on the collar (our generated HEX file was too big);
 | 
			
		||||
even now, the collar is succeptible to stack overflows even on small call stacks.
 | 
			
		||||
On embedded hardware, these stack overflows lead to a hard crash, and make
 | 
			
		||||
the collar non-functional.
 | 
			
		||||
 | 
			
		||||
We recommend that a more robust chip be used for the collar, at the cost of increased
 | 
			
		||||
power consumption. Though there exist models of the ATmega (or other AVR controller)
 | 
			
		||||
that have more memory, it could be fruitful to use an ARM processor instead. Doing so,
 | 
			
		||||
though, will likely require the reimplementation of the collar firmware from scratch.
 | 
			
		||||
 | 
			
		||||
Additionally, a goal of the Fenceless Grazing System is to be able to redirect
 | 
			
		||||
animals back into a ``valid grazing area". This is to be done with an auditory
 | 
			
		||||
stimulus (a loud beep, for instance) or an electric shock. Currently, the
 | 
			
		||||
collar is capable of determining whether or not it's inside the valid
 | 
			
		||||
grazing boundary, but doesn't have the hardware to influence its host animal.
 | 
			
		||||
To make this work in a field, the collar will probably also require
 | 
			
		||||
a case. We suggest laser cutting one, since 3D printing at the size of the current
 | 
			
		||||
prototype would simply take too long and have a high chance of failure. Note
 | 
			
		||||
that the GPS and LoRa antennas should be outside of the case, so as to
 | 
			
		||||
be able to communicate with the rest of the world.
 | 
			
		||||
 | 
			
		||||
\end{document}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user