SwissQM is a stack-based Virtual Machine for wireless sensor networks.
It was created at the Department of Computer Science at ETH Zurich.
SwissQM is an acronym for Scalable WirelessSensor Query Machine.
SwissQM defines a bytecode instruction set that is independent of
sensor platforms and application languages. Traditionally, sensor
networks are programmed using low-level languages such as
nesC on systems such
as TinyOS. This is, in general,
difficult because the programmer needs to take care of many
low-level details, that even vary between different platforms.
Creating bytecode rather than nesC code increases
the abstraction level of programming sensor networks. In combination with
a gateway system that accepts programs and queries written in a high-level
language and translates them into bytecode,
programming of sensor networks can further be simplified.
SwissQM is a flexible platform for programming sensor networks and
data acquisition tasks. SwissQM allows:
Event-processing at the sensors nodes
Implementation of data-cleaning pipelines
Finite state automata at the sensor nodes
Pushing down complex processing functionality
all the way to the sensor nodes
Turing-complete programming model
Programming sensors networks using different
high-level language front-ends
Sensor Node Platforms
Xbow Mica2 (no longer actively maintained)
Moteiv tmote sky
SwissQM Version 2.0.0 Download (June 2nd 2008)
SwissQM Virtual Machine
Implementation on top of TinyOS 2.0.2
Tuple combining for non-aggregation queries
Lazy tuple forwarding using tuple deadlines
Result propagation through CTP Tree Collection Protocol
Optional: fixed Tree Implementation for testing
Based on a modular global time synchronization protocol,
decoupled from result messaging layer
Reimplementation into modular OSGi components and services.
This makes the system extensible and perfectly suitable
to be used as a research platform.
Query compiler for CSQL and XQuery
User-defined function (UDF) parser for C language subset
SwissQM OSGi Gateway
Consists of SwissQM core, CSQL and XQuery parser, UDF parser and
bytecode generator and Eclipse plug-in. Note: the installation
of the Gateway uses R-OSGi and Maven
as a build tool. Setting up the Eclipse plug-in with its dependencies
is a bit intricate. For detailed instructions see the
Ubuntu Linux VMware image with
fully installed SwissQM environment (big!, 1.2 GB compressed, 3.7 GB
uncompressed) Contains: TinyOS 2.0.2-2 with patched
msp430-gcc, SUN JDK 1.5,
Eclipse 3.3.2, Maven 2.0.9, and run configuration for SwissQM Eclipse plug-in.
This VMware image can be run by the free
VMware Player. The image is identical to the installation obtained
when following the installation guide.
The VMware image is despite its size most likely the easiest and fastest
way to get started with SwissQM. Note: the name of the user set up
is swissqm (Password:
SwissQM Gateway (Java)
The gateway application consists of two graphical tools:
(1) Query GUI that allows submitting
of queries (similar to TinyDB).
The submitted queries are compiled into QM bytecode programs that are then
sent into the sensor network where they are executed by the SwissQM Virtual Machine.
(2) Bytecode Assembly Interface allows sending
hand-crafted bytecode programs (written in SwissQM bytecode assembly) into the
sensor network, thus providing full access over SwissQM.
In both applications results generated in the network are sent back
to the gateway for visualisation and logging into a database through JDBC.
Queries can contain complex expressions as well as user-defined functions.
These function are can written in a C-like language and are compiled into
the bytecode programs that are generated from the queries.
René Müller, Gustavo Alonso:
Sharing of Sensor Networks
In Proceedings of the 3rd IEEE International Conference on
Mobile Ad-hoc and Sensor Systems 2006, Vancouver, Canada, October 9-12th 2006.