In Einstein’s theory of relativity time is a literal fourth dimension of spacetime in the sense that spacetime has a natural distance measure that blends time and the three dimensions of space.

Check out 3D projection of a tesseract undergoing a simple rotation in four dimensional By JasonHise at English Wikipedia

In plain words, time is a human construct used to determine change. For many, time appears to ‘stand still’ when nothing happens. Understanding and approaching the variable of time has alot to do with what I assume is an potential face-to-face interactions.

Very quickly…what is a potential for interaction

Here I want to make a clear destinction between what I say is a interaction and what is a potential for interaction. A potential for interactions is what I use to assume someone is having an interaction but do not know for sure, which will have to be the case in my thesis(as it will be an automated approach to tracking interactions). Interactions on the other hand is something that can be more subjective and knowing for sure if someone has interacted with someone else is hard for a computer to do

Defining time: Segments

For example 30 second intervals as ‘Segements’ (and I’ll come back to this with a later post) but essentially it is dividing up the program into) as a indication of moments in Time. In response to experiment 8, we realised we needed to take the average a period of time in order to get a better indication of the rssi (because of its fluxuation). see ‘early work using time’ as to how I plan to do this.

Representation of time

  1. Animation: This animation moves at 10 frames per second.


Animation is the process of making the illusion of motion and change by means of the rapid display of a sequence of static images that minimally differ from each other (according to wikipedia)

PROBLEMS: grabbing a segment of that data and analysing it

  1. Static images: The bouncing ball animation (below) consists of these six frames.

something or other

PROBLEMS: Conveying motion is disjointed

Early work using time

Below is a sample of json time and rssi values used as imputs for producing time segments. The difference between one state to another can be anything between milliseconds, to 30 second intervals(which is the case in this example)

{ "time" : "2016-07-12T09:52:30.021353" , "rssi" : -61 },
{ "time" : "2016-07-12T09:52:31.852827" , "rssi" : -69 },
{ "time" : "2016-07-12T09:52:32.893738" , "rssi" : -61 },
{ "time" : "2016-07-12T09:52:33.852827" , "rssi" : -73 },
{ "time" : "2016-07-12T09:52:34.893738" , "rssi" : -76 },
{ "time" : "2016-07-12T09:52:35.117117" , "rssi" : -69 },
{ "time" : "2016-07-12T09:52:36.344178" , "rssi" : -78 },
{ "time" : "2016-07-12T09:52:37.117117" , "rssi" : -65 },
{ "time" : "2016-07-12T09:52:38.344178" , "rssi" : -69 },
{ "time" : "2016-07-12T09:52:39.021353" , "rssi" : -70 },

The first step was importing the json file into the grasshopper script so the python can read the file. Was simple enough:

something or other

Cull Index

The next step was not really necessary but helpful to sort all the low rssi detections from the most useful higher rssi values.

something or other

Average all detections within a 30 second time period

something or other

import Rhino
import scriptcontext
import datetime

Find me the index that is >= to the time difference of the first index

def StringToDateTime(string):
    return datetime.datetime.strptime(string, '%Y-%m-%dT%H:%M:%S.%f')# the GH needs the formatting for the new datetime

Take the datetime and then reformat it/ understand it based on this datetime translation key: %Y-%m-%dT%H:%M:%S.%f

   times = [StringToDateTime(time) for time in timeList] 
   rssi = rssiList
   instance = 0
   firstTime = times[0]
   currentTimePeriodEnd = firstTime + datetime.timedelta(0,timeDifference)
   avgList = []

chunk = []

Input is a list of strings (for whatever reason) so convert them to a datetime, while the index of f is within the range of rssiList, do something

for index, time in enumerate(times):
    # emumerate(takes a number of things(within a range) and mentions them one by one. This was used to gather all detections within a time period which is then sent to be averaged. 
    if time <= currentTimePeriodEnd:
        chunk.append(int(rssi[index])) # the input is a list of strings for what ever reason so convert to int.
        avg = sum(chunk)/len(chunk)
        chunk = []
        currentTimePeriodEnd = currentTimePeriodEnd + datetime.timedelta(0,timeDifference)

Now take the first time period and then the last time period(plus 30 seconds) and then average all the detections within that time period.