We created a new nodewatcher module as a part of this year's Google Summer of Code program. The module is responsible to store survey data about neighboring wireless nodes into our database.
Nodewatcher (more specifically, nodewatcher agent is continuously running site surveys on its nodes. This entails suspending the usual wireless radio operations and focus instead on detecting other WiFi antennae in its proximity. We are able to collect a great deal of data about our neighboring wireless access points / routers, but we had no way of processing and storing this data into our database. The data we can detect includes identifying labels that humans see (formally known as SSID labels) - informally known as the name of the network, a machine-readable ID of a particular wireless node and signal strength, which can be thought of as a noisy indicator of the distance between the node that conducted the survey and the discovered node.
We run this survey on all the nodes with compatible hardware. We now also have a module that is responsible for accessing the data, going through all fields of interest, detecting whether those fields are present or corrupted and conditionally enter it into the database.
To process the data, we create a graph structure in the shape of a star for every node we process. The vertex in the middle is the node conducting the survey. Each additional vertex in the graph represents a wireless radio device. Note that some advanced wireless nodes feature multiple radios (they can be used to simultaneously transmit on multiple frequency bands). We also create an edge between the center node and its neighbor that stores all the information about the link.
This is of course only a description of the latest version, but you can see the entire history of this development (with more than 40 iterations and 150 messages exchanged) on GitHub.