Timelapse

This application was added in SmartMesh SDK 1.0.5

The Timelapse application consists of 2 scripts:

  • Timelapse1Collect.py connects to a SmartMesh IP manager and logs all network activity in NetworkActivity.txt
  • Timelapse2Analyze.py analyzes the contents of NetworkActivity.txt

running Timelapse1Collect.py

Start the Timelapse1Collect.py application and connect to the SmartMesh IP manager. The application subscribes to all notifications and displays the number of notifications it has received:"

 

In the background, Timelapse1Collect.py logs all that activity in the file NetworkActivity.txt. You can open that file with any text editor:

[Thu, 18 Feb 2016 15:08:46 UTC] [startLogging]
[Thu, 18 Feb 2016 15:08:51 UTC] [moteConfig] [{"macAddress": [0, 23, 13, 0, 0, 56, 4, 59], "state": 4, "isRouting": true, "reserved": 1, "RC": 0, "moteId": 1, "isAP": true}, {"macAddress": [0, 23, 13, 0, 0, 56, 4, 53], "state": 4, "isRouting": true, "reserved": 0, "RC": 0, "moteId": 2, "isAP": false}, {"macAddress": [0, 23, 13, 0, 0, 56, 3, 202], "state": 4, "isRouting": true, "reserved": 0, "RC": 0, "moteId": 3, "isAP": false}, {"macAddress": [0, 23, 13, 0, 0, 56, 6, 201], "state": 4, "isRouting": true, "reserved": 0, "RC": 0, "moteId": 4, "isAP": false}, {"macAddress": [0, 23, 13, 0, 0, 56, 7, 12], "state": 4, "isRouting": true, "reserved": 0, "RC": 0, "moteId": 5, "isAP": false}]
[Thu, 18 Feb 2016 15:08:51 UTC] [moteInfo] [{"macAddress": [0, 23, 13, 0, 0, 56, 4, 59], "assignedBw": 0, "state": 4, "numGoodNbrs": 4, "packetsReceived": 22, "totalNeededBw": 96, "requestedBw": 57180, "avgLatency": 0, "RC": 0, "numNbrs": 4, "packetsLost": 0}, {"macAddress": [0, 23, 13, 0, 0, 56, 4, 53], "assignedBw": 99, "state": 4, "numGoodNbrs": 4, "packetsReceived": 378, "totalNeededBw": 99, "requestedBw": 99, "avgLatency": 40, "RC": 0, "numNbrs": 4, "packetsLost": 0}, {"macAddress": [0, 23, 13, 0, 0, 56, 3, 202], "assignedBw": 7149, "state": 4, "numGoodNbrs": 4, "packetsReceived": 247, "totalNeededBw": 8169, "requestedBw": 8169, "avgLatency": 1000, "RC": 0, "numNbrs": 4, "packetsLost": 0}, {"macAddress": [0, 23, 13, 0, 0, 56, 6, 201], "assignedBw": 3576, "state": 4, "numGoodNbrs": 4, "packetsReceived": 245, "totalNeededBw": 3366, "requestedBw": 8169, "avgLatency": 530, "RC": 0, "numNbrs": 4, "packetsLost": 0}, {"macAddress": [0, 23, 13, 0, 0, 56, 7, 12], "assignedBw": 7149, "state": 4, "numGoodNbrs": 4, "packetsReceived": 245, "totalNeededBw": 8169, "requestedBw": 8169, "avgLatency": 510, "RC": 0, "numNbrs": 4, "packetsLost": 0}]
[Thu, 18 Feb 2016 15:08:51 UTC] [topology] [{"toMAC": [0, 23, 13, 0, 0, 56, 4, 53], "quality": 97, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 59]}, {"toMAC": [0, 23, 13, 0, 0, 56, 3, 202], "quality": 100, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 59]}, {"toMAC": [0, 23, 13, 0, 0, 56, 6, 201], "quality": 97, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 59]}, {"toMAC": [0, 23, 13, 0, 0, 56, 7, 12], "quality": 97, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 59]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 59], "quality": 97, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 53]}, {"toMAC": [0, 23, 13, 0, 0, 56, 3, 202], "quality": 81, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 53]}, {"toMAC": [0, 23, 13, 0, 0, 56, 6, 201], "quality": 94, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 53]}, {"toMAC": [0, 23, 13, 0, 0, 56, 7, 12], "quality": 100, "fromMAC": [0, 23, 13, 0, 0, 56, 4, 53]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 59], "quality": 100, "fromMAC": [0, 23, 13, 0, 0, 56, 3, 202]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 53], "quality": 81, "fromMAC": [0, 23, 13, 0, 0, 56, 3, 202]}, {"toMAC": [0, 23, 13, 0, 0, 56, 6, 201], "quality": 74, "fromMAC": [0, 23, 13, 0, 0, 56, 3, 202]}, {"toMAC": [0, 23, 13, 0, 0, 56, 7, 12], "quality": 74, "fromMAC": [0, 23, 13, 0, 0, 56, 3, 202]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 59], "quality": 97, "fromMAC": [0, 23, 13, 0, 0, 56, 6, 201]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 53], "quality": 94, "fromMAC": [0, 23, 13, 0, 0, 56, 6, 201]}, {"toMAC": [0, 23, 13, 0, 0, 56, 3, 202], "quality": 74, "fromMAC": [0, 23, 13, 0, 0, 56, 6, 201]}, {"toMAC": [0, 23, 13, 0, 0, 56, 7, 12], "quality": 74, "fromMAC": [0, 23, 13, 0, 0, 56, 6, 201]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 59], "quality": 97, "fromMAC": [0, 23, 13, 0, 0, 56, 7, 12]}, {"toMAC": [0, 23, 13, 0, 0, 56, 4, 53], "quality": 100, "fromMAC": [0, 23, 13, 0, 0, 56, 7, 12]}, {"toMAC": [0, 23, 13, 0, 0, 56, 3, 202], "quality": 74, "fromMAC": [0, 23, 13, 0, 0, 56, 7, 12]}, {"toMAC": [0, 23, 13, 0, 0, 56, 6, 201], "quality": 74, "fromMAC": [0, 23, 13, 0, 0, 56, 7, 12]}]
[Thu, 18 Feb 2016 15:08:52 UTC] [notifData] {"utcSecs": 1025671899, "utcUsecs": 297250, "macAddress": [0, 23, 13, 0, 0, 56, 4, 53], "srcPort": 61625, "dstPort": 61625, "data": [0, 2, 5, 0, 255, 1, 5, 0, 0, 0, 0, 61, 34, 130, 219, 0, 4, 157, 198, 0, 0, 117, 48, 1, 16, 9, 154]}
[Thu, 18 Feb 2016 15:09:03 UTC] [notifData] {"utcSecs": 1025671910, "utcUsecs": 505750, "macAddress": [0, 23, 13, 0, 0, 56, 7, 12], "srcPort": 61625, "dstPort": 61625, "data": [0, 2, 5, 0, 255, 1, 5, 0, 0, 0, 0, 61, 34, 130, 230, 0, 7, 184, 62, 0, 0, 117, 48, 1, 16, 7, 151]}
[Thu, 18 Feb 2016 15:09:06 UTC] [notifData] {"utcSecs": 1025671913, "utcUsecs": 369500, "macAddress": [0, 23, 13, 0, 0, 56, 3, 202], "srcPort": 61625, "dstPort": 61625, "data": [0, 2, 5, 0, 255, 1, 5, 0, 0, 0, 0, 61, 34, 130, 233, 0, 5, 172, 44, 0, 0, 117, 48, 1, 16, 9, 217]}
[Thu, 18 Feb 2016 15:09:11 UTC] [notifData] {"utcSecs": 1025671917, "utcUsecs": 523750, "macAddress": [0, 23, 13, 0, 0, 56, 6, 201], "srcPort": 61625, "dstPort": 61625, "data": [0, 2, 5, 0, 255, 1, 5, 0, 0, 0, 0, 61, 34, 130, 237, 0, 8, 13, 107, 0, 0, 117, 48, 1, 16, 9, 132]}

In this file, each line contains one notification, and starts with a timestamp of when that line was written to the file.

running Timelapse2Analyze.py

Before you can run Timelapse2Analyze.py, you need to create a file called MotePositions.txt which indicates the position of each of the motes in the network. An example contents of this file is:

00-17-0D-00-00-38-04-3B 0 0
00-17-0D-00-00-38-04-35 2 1
00-17-0D-00-00-38-03-CA 4 0
00-17-0D-00-00-38-06-C9 1 5
00-17-0D-00-00-38-07-0C 3 3

In which:

  • the first column is the MAC address of the different motes and manager in the network
  • the second column is the position of the mote/manager on the X-axis
  • the second column is the position of the mote/manager on the Y-axis

Once this file is created, double-click on Timelapse2Analyze.py. This will create two files:

  • allMoteInfo.html contains a table which contains statistics for each mote
  • topology.html draws the topology of the nodes. Hovering over a node displays the same information as contained in allMoteInfo.html.