
wosh
WOSH (Wide Open Smart Home) is an open multi-platform framework (message oriented middleware) for controlling and automating a home. The WOSH architecture is service (bundles) oriented, designed for distributed (cloud) computing.
WOSH ships with library source, many services, and some applications (a server, a trayicon remote controller, and a GUI full-controller). Some features provided by its micro-kernel are a multi-user system with access policies, a centralized database manager and system monitor, and automatic network management and masquerading (on TCP). Some of the implemented services are: multimedia audio playback, monitor and control of X10 devices, remote control using instant messaging, and a remote control using SMS and call notification.
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-Applications (as servers, front-ends, ..) ship with a 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 NetworkManager, UserManager, 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 Bundles 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 Bus(ses) and receive messages (FIFO per Bus), message-posting 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. Message has a source/destination (URI, supporting regex) and generic content-template (mostly: Request, Response, Fact, 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) MessageQueue(s). While most Bundles act as centralized services (because they often dependent on hardware or other local services), there are some core-components and network-wide information that have to be distributed and synchronized between hosts transparently.
Project Information
- License: New BSD License
- Content License: Creative Commons 3.0 BY-SA
- 2 stars
- svn-based source control
Labels:
home-automation
messaging
entertaiment
smart-home
middleware
communication
message-bus-oriented
ansi-c
multiplatform
framework
bundles