client | ||
cooja | ||
oracle | ||
proxy | ||
simulation | ||
.gitignore | ||
LICENSE | ||
README.md |
NetPP exhibition control wireless sensor network
NetPP is a simulation of a wireless sensor network which makes use of the IEEE stack recommended for IoT, from bottom to top: wireless IEEE 802.15.4, 6LowPAN, IPv6 with RPL routing, UDP and CoAP. It runs on Z1 motes. This project was developed for the Advanced Networks and Wireless Systems exam (Networking++ for friends)
Scenario
NetPP is a company which organizes public events and exhibitions, which installs a sensor (oracle) for each stand in order to keep track of people's flow.
- Formal requirements:
- network must be fully operational in less than 70 minutes, which is an estimation of the time needed to mount all the stands for small daily exhibition
- nodes run on battery and must use as less energy as possible, in order to make it possible to reuse them for multiple events
- Other requirements:
- RPL must use objective function 0, ie find the nearest grounded root
- Sensor messages must be RFC8428 (SenML) compliant
- a CoAP proxy must be developed in Java using the Eclipse Californium CoAP library (proxy)
Trickle parameters
In order to satisfy the formal requirements, studies from this paper have been taken in account, thus smallest possible value for k and highest possible value for Imin have been chosen, and in particular these have been exploited:
- k = 1
- Imin = 211 (ms)
30 independent simulations have been run, and all of them let the first network DODAG form in less than 20 minutes.
Repository organization
client
: source code for a CoAP clientcooja
: sample simulations for Coojaoracle
: source code for the sensor nodeproxy
: source code for the CoAP proxysimulation
: scripts for running simulations and plot performance graphs
Run
- choose a Cooja simulation file from
cooja
directory
- start the serial socket server on node 1 (border router)
- start the simulation
- attach a rpl-border-router to Cooja
- you can use the one from
examples/ipv6/rpl-border-router
in your Contiki repository- if you want to reproduce the simulation results, use the modified version (which outputs the number of discovered routes)
- connect
$ make connect-router-cooja PREFIX="2001:db8:cafe:babe::1/64"
Proxy
$ mvn package
$ java -jar target/proxy-2019.11.0-jar-with-dependencies.jar <prefix> <n>
where
<prefix>
is your network prefix (specify all 64 bits)<n>
is the number of nodes in the network
Example:
$ java -jar proxy/target/proxy-2019.11.0-jar-with-dependencies.jar 2001:db8:cafe:babe 30
Resources on the server are named after the node IPv6 address, eg: urn:it.unipi.ing.ce.netpp:c00000001
.
You can use a CoAP browser to list all resources on the server, for example:
Client
$ mvn package
java -jar target/client-2019.11.0-jar-with-dependencies.jar <url>
where
<url>
is a CoAP URL
Example:
$ java -jar target/client-2019.11.0-jar-with-dependencies.jar coap://[2001:db8:cafe:babe::1]/urn:it.unipi.ing.ce.netpp:c00000001
Simulation
The simulation/main.sh
can be used to run automatically several independent simulations with Cooja.
Parameters
REPOSITORY
path to this repository root directoryCONTIKI
path to Contiki repositorySIMULATION
path to Cooja simulation (.csc file)REPEAT
number of repetitionsINIT
initial repetition number (INIT + REPEAT
is used as random seed)
Moreover, inner for
s can be tuned in order to explore several combinations of k and Imin.
Output
Output results can be found in simulation/results
.
References
[1] Vallati, Carlo & Mingozzi, Enzo. (2013). Trickle-F: Fair broadcast suppression to improve energy-efficient route formation with the RPL routing protocol