WOSH system

0.8.888 [phoenix]

WOSH (Wide Open Smart Home) is an open source, cross-platform, message-oriented middleware, written in ANSI C++, designed to enable (smart) home automation.

WOSH is a Service Oriented Framework (SOA) providing a (Network) OS independent infrastructure for developing component based software (services, aka bundles); the architecture is inspired by OsGi.

WOSH is not a monolithic application, it's rather a modular library.

WOSH is distributed as Open Source. Creative Commons BY-NC-SA/3.0

This framework is still experimental, currently released as preview for developers and expert users.

Table of Contents:

Documentation is still transitional from WOSH 0.6.030 [ byron ] to WOSH 0.8.499 [ icarus ]. Some sections may be out-of-date.

State of the Art

Home automation software is a very hot topic. There are few commercial end-user applications (which usually ships with device-packages) to manage a 'smart' home. Such applications are closed, platform-specific.

Fortunatly there are many open drivers and applications designed for specific devices and protocols.

At time of speaking, there are no real standards in home-automation, multimedia protocols are growing but appliances are still dummy devices and when they can be controlled, it's through a propertary protocol.


Many projects were born from a dream.

I imagine my home: interactive, smart, based on open, free systems, designed on inhabitants' needs.

I'll plug new hardware from commercial majors and home-made both, referring to well-known protocols. I'll install new services and hosts that interact each others dynamically. I'll easily setup custom automations when needed, but usually everything will follows my lifestyle without instructions. I'll safely access my home from different communication-channels and locations, the system also acts as communication router granting privacy to the user. I'll control my computers and any devices through stardard interfaces, no matter their low-level protocol or architecture.

My home is smart and will learn my attitudes, preferences, my own lifestyle.

As Developer, I imagine that the dream is enabled by a software: framework (middleware).

I may think on something like OsGi, with .NET or Java capabilities, but in C++.

I dreamed WOSH.


WOSH (Wide Open Smart Home) is an open source, multi-platform framework (message oriented middleware) written in ANSI C++, designed to enable (smart) home automation. WOSH is a Service Oriented Framework (SOA) providing a (Network) OS independent infrastructure for developing component based software (services, aka bundles), but it ships with many implemented services and some end-user applications (as woshsrv, WorkShop).

Some reasons to use and join the WOSH projects are:

See also:
Configure the WOSH system
Running WOSH for first time
Using WOSH and some use-cases

WOSH Features

Some examples of what WOSH offers are explained in section Using WOSH. Many features depends on hardware devices (such as X10 control), media playback, telephony. Most important features for end-user are:

WOSH Architecure

WOSH Applications (as servers, front-ends, ..) ship with a wosh::WoshKernel singleton and act as one (idempotent) host of the WOSH network (in other words: peer-to-peer), WoshKernel is a microkernel hosting a limited number of core-services (such as wosh::NetworkManager, wosh::UserManager, wosh::BusManager, ..).

Bundles and many internal components are loaded dynamically at run-time (often on first use) and implement (shared, well-known) interfaces. Object allocation and type-recognition is a custom, extended RTTI model, supporting multiple-inheritance trees and class-versioning). WOSH concurrency model is (very) asynchronous and multi-tasking.

WOSH provides (almost) a zero-configuration networking, run-time protocol loading/setup. Kernel, Core-Services and wosh::Bundle may cooperate and exchange information only by passing messages. Messaging mode follows a weak publish/subscribe model. Message handlers (such as Bundles) may connect to one or more wosh::Bus(ses) and receive messages (FIFO per Bus), messageposting is totally asynchronous. Actually, message-delivery contract is (very) weak: no ACKs/retransmissions; within a private BusRing, message-ordering is [FIFO, total, but not virtually synchronous (view changes are applied immediately)], but generally unpredictable (because of network and intra-bus routing). In short: messages are very similar to UDP datagrams.

wosh::Message has a source/destination (wosh::URI, supporting regex) and generic content-template (mostly: wosh::Request, wosh::Response, wosh::Fact, wosh::Notification). Destination/Content filtering is implemented within the listener itself (not by the dispatcher). Delivery is usually iterative and non-fault-tolerant.

Messages may be routed transparently (and optimized by the framework) between Bus(ses) and hosts of the network. In other words, a "medium" level of location transparency is provided. WOSH Networking is based on host-discovery, provided by a generic Discovery service (actually implemented on-top of UDP). Discovery datagrams hold information required to setup a connection and some optional information for optimized routing strategies (such as neighbours list). NetworkManager monitors channels (connections) and creates new links (intersecting supported protocol-strings, such as TCP:// Message (de)serialization is implemented by another core-component. Message transmission is always point-to-point, supporting multi-hop based on static and dynamic routing tables. BusManager and NetworkManager cooperate using two (asynchronous) wosh::MessageQueue(s).



WOSH is a multi-platform software, tested on POSIX, Windows, Windows-Mobile and compatible with MAC-OS, you may find links to online repositories on Distribution. First updated repository is hosted by SourgeForce.

Generated on Sat Feb 26 2011 11:27:44 for WOSH system 0.8.888 [phoenix] by Alessandro Polo, using DoxyGen 1.7.2 hosted by WOSH Framework