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
experimental, currently released as preview for developers and expert users.
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.
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
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:
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:
applications:console (CLI) and graphical (multiplatfom GUI) both
Distributedcomputing, minimal configuration networking
libgloox; compatible with GTalk), SMS (send/receive) and call monitoring (on Windows-Mobile, RNDIS connected smart phone)
GStreamer, on POSIX or QT
VLC). Media-Director service provides a high abstraction layer, the recovery/guess multimedia status, hardware/software shortcuts and more. Supported also Music Player Daemon protocol.
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://192.168.0.1:7878). 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.