Souliss, Home Automation and IoT using Arduino and Android

[UPDATE]
There are a lot of news that wasn't in the original schedule, please refer to the latest post of this topic or have a look to the website www.souliss.net or @soulissteam
[/UPDATE]

Hello Forum,

I would like to share a first step of an Home Automation project called Souliss Home Automation, available at http://sourceforge.net/projects/veseo-souliss/ , it's a framework composed of 3 layers (Souliss, MaCaco and vNet) that make easy build its own home automation applications.

Main features of this framework are listed below:

  • It support a P2P network, with a virtualized communication. The application doesn't care about the communication media that is used, routing/bridging within nodes is also provided
  • A communication protocol to share data between nodes, a nodes is an Arduino-based device, but the idea is move the framework over many platforms. An example, and Android mobile phone can be a node.

The network virtualization is care of vNet, that offer a virtual network of nodes regardless media used (now are supported a modifed Ethernet and Chibiduino). Frames are automatically bridged and routed within nodes, without any extra code in the application that use it.

The communication protocol is MaCaco, it allow standard polling, pushing of data but also subscribing. If a data is subscribed, the source of data will send frame over the network only when data changes. The subscriber care to check the channel healty.

Using vNet+MaCaco and adding some standard logics for home automation (like lights, doors, ...) the framework is complete and released as Souliss. Some simple examples are provided, to manage light and garage doors, locally and remotely at same time. The approach is distributed, there isn't a central node. Each Arduino has it's own logic and acquire by it-self data from other nodes.

What's next, an UI that now is missing. The idea is start with an Android application that via ethernet acquire data from the nodes, it required a special handling of sockets as per vNet and then move the framework over different platform. This allows and integrated network of Arduinos, mobile phones, computer, media center or whatever.

The ideal roadmap is described below, but the real development progress will be depend on help that I will have, because also if the library is working, there are a lot of todos:

  • Develop the framework for Android to get a basic UI,
  • Improve RAM requirements,
  • Extend broadcast support for vNet (now is there but is not fully working),
  • Include RFM22B in vNet,
  • Docs,
  • Make available more logics in Souliss,
  • Make a full UI Android based,
  • Develop the framework for other platform (more is bettter)
  • A dedicated board (wireless 434/900Mhz w RFM22B, 24V, 16DI buffered, 8 DO, relays off-board).

People that would like to join this project are welcome, as are welcome any suggestion or comment.

Regards,
Dario.

Sounds interesting.

Re the roadmap, can you move "Docs" to the top :slight_smile:


Rob

Is somenthing that is going on, I'm writing the user guide and another guy from forum is writing the code documentation.

Based on people that want join the project, roadmap can change.

Regards,
Dario.

It might be a chicken and egg situation, meaning that people may not get interested until they see more information.

For example it seems that each node has to be Ethernet aware, is that the case?

If so the granularity is fairly course but a node can then have "points" etc and monitor/control a lot of things. But is there provision for a node that say just monitors a single switch?

With a publishing/subscribing model everyone (meaning developers) probably has to agree on logical addresses (say the front door publisher has to identify it's data as such) and data formats etc. Is that sort of thing pre-defined or to you define such things at each installation?


Rob

Hi Rob,

Ethernet is not mandatory, just is supported. The vNet library care automatically to bridge and route frames within the network and all the supported media, up to now two are supported: Ethernet and Chibiduino. Furthermore, Ethernet is no longer the standard library, but is a modified that allow multiple user (socket are not used permanently).

The Souliss library is a collection of methods that pre-define the sharing charateristics.

I know that docs are important, but if you look into the example you will found many of the answer to your question.
Please note also, that docs are not ready, but something is provided. For example, from the begin was loaded an user guide for vNet library, that discuss about connectivity and addressing.

Hope that documents will be ready as soon, but I'm looking also for people that would join the project to speedup.

I've not understood the quesiton:

If so the granularity is fairly course but a node can then have "points" etc and monitor/control a lot of things. But is there provision for a node that say just monitors a single switch?

Regards,
Dario.

I've loaded a new user guide for Souliss library out of the user guide for vNet that was already loaded, both are available at https://sourceforge.net/projects/veseo-souliss/files/User%20Guide/

Regards,
Dario.

Hm, isn't this a lot of complexity to solve a relatively easy problem ? Maybe abstract frameworks are fun, but this looks soo complex that I'm afraid it will be slow on poor Arduinos...

Quite sure that you haven't tryed it, isn't slow.

If you look to many of the home automation project build up to now, you will found nice project that doesn't offer scalability: for example many will not offer both hardwired and serial command or doesn't not support multiple nodes.

If you want to try it and share your suggestion, you will be welcome.

Regards,
Dario.

After the first release of Souliss, I've changed a bit the roadmap moving at high priority an user interface, then docs will follow as much is possible.

The idea at begin of project was build the Souliss frame over different OS, this make PC or mobile devices like nodes able to interact, so make them user interface. To speed-up the development I've moved to a different solution, with a node that collect all data from other nodes and share these data via JSON. Based on this solution is ready (but still not released) a web-based user interface, furthermore an iPhone apps may be worked out by BoomTakZaag.

In attachment there is a screenshot for the user interface, is AJAX based but the webpage isn't loaded from the Arduino and is loaded locally from the PC or mobile device. At this topic an example for TinyWebServer is modified to load the page locally and use JSON, based on this is born the user interface for Souliss.

This interface will be released at end of Jan12 with other improvement, if someone in the mean time would help as alpha-tester will be welcome.

Video

Regards,
Dario.

The release A2 of Souliss is now available on SourceForge at following address: http://sourceforge.net/projects/veseo-souliss/

Additional features:

  • Compatibility with standard Ethernet class (2 sockets),
  • JSON Server for User Interfaces,
  • Browser based User Interface,
  • Support for new typicals (ready to use logics for Home Automation).

Regards,
Dario.

Hi Dario, we met on the italian home automation forum :slight_smile:

I'm studying your approach to home automation, I decided to use some arduino UNO (4, maybe 5) to control some sensors/actuators (about 30, I would say) connected via Ethernet, and it seems I could use souliss, is this correct?

I made some tests on my own in writing a really small and stupid home automation 'framework', to excange state message and commands between nodes: it was almost working, but I had serious RAM issues: as I tried to debug with Serial.print commands, everything got messed up (RAM exausted, I believe) with strange outputs and/or Arduino reboots.

How do you cope with Arduino's small RAM? Did you have to face memory issues? How much RAM does Souliss use? Thank you

I'm an experienced java developer, but my C++ is rusty and I'm an hardware noob. Do you think I could contribute to Souliss if I decided for this library? I'm already registered on sourceforge ... :slight_smile:

Thank you for sharing

shineangelic:
Hi Dario, we met on the italian home automation forum :slight_smile:

Hi,

shineangelic:
I'm studying your approach to home automation, I decided to use some arduino UNO (4, maybe 5) to control some sensors/actuators (about 30, I would say) connected via Ethernet, and it seems I could use souliss, is this correct?

Yes, you can have a network with only ethernet nodes. Is supporter the Wiznet W5100 chip, this is used in Ethernet Shields, Arduino Ethernet board and compatible.

There are two options: use only the base framework (vNet+MaCaco) that give you a P2P communication channel and a communication protocol. Over this framework you can build your own home automation system; use the full Souliss project, that give you also the home automation logics and sharing methods.

shineangelic:
I made some tests on my own in writing a really small and stupid home automation 'framework', to excange state message and commands between nodes: it was almost working, but I had serious RAM issues: as I tried to debug with Serial.print commands, everything got messed up (RAM exausted, I believe) with strange outputs and/or Arduino reboots.

How do you cope with Arduino's small RAM? Did you have to face memory issues? How much RAM does Souliss use? Thank you

The full Souliss project can use from 700 bytes up to 1300 bytes based on the configuration, the heavyiest are "bridge" and "JSON Server" configuration. The communication protocol is binary and quasi state-less, so there is a small RAM footprint.

shineangelic:
I'm an experienced java developer, but my C++ is rusty and I'm an hardware noob. Do you think I could contribute to Souliss if I decided for this library? I'm already registered on sourceforge ... :slight_smile:

There are several ways to contribute, the most appreciated is a Java PC based interface for Souliss. Now Souliss has a simple web based user interface, an iPhone app is under development by a forum user.

If you would like to start, let me know with a PM.

Regards,
Dario.

Is available the release A2.1 on SourceForge http://sourceforge.net/projects/veseo-souliss/, it has the same content but some bugs were fixed.

Android client development going on:

now working on timed and positional triggers (i.e. go out -> automatically shut off lights)

Second Souliss Client video, showing "Programs" functionalities. Still much work to do:

Updated documentation available at http://sourceforge.net/projects/veseo-souliss/files/User%20Guide/

Is now available the project website at www.souliss.net, this topic still will be used for updates and news.

English is not my main language, so sorry if any grammatical error will be in the site.

Regards,
Dario.

Is now available the release A2.3 that support the Android application developed by shineangelic, both can be downloaded from the SourceForge repository, the link for them in the download section of the Souliss site.

Regards,
Dario.

The release A3 with support for ENC28J60 Ethernet controller and KMTronic DINo board is now available for download.

On the Souliss website are available more details about this new release.

Regards,
Dario.

Hi Forum,

is from long time back that I don't include there updates about the Souliss project. We spent more than four months in rebuilding some features to get a better user interaction and now we are ready with the new release A4.

The biggest change is in the communication side, now the whole project is based on binary protocols, up to release A3 only the communication between the board was in binary rather the communication to user interface was based on ASCII protocol (HTTP/JSON).
It was working but when we included support for software IP stack (used in case of ENC28J60 controller) there were a slow down of the performances and too many use of RAM, so we moved to a binary protocol that for the Android interface is Macaco over vNet like for the boards.
Of course MaCaco is not a standard, so we looked into binary protocols available without license fee and we decided to include Modbus RTU and TCP.

Now the performances are really increased and there is a better use of RAM, where some efficiency was get modifying the buffer handling and introducing the oFrame data structure.
There is also a one more, the IP part is moved from TCP to UDP in order to support broadcasting (not yet released).

If we look to these modification in terms of user benefit, we have that now Android does no longer poll Souliss boards for data, because MaCaco is event based; there is more RAM available on the application side (for the boards). Then Modbus is a new starting point, because is supported by many interfaces and let build an own in a simple way.

On the Modbus side, we get the support from IntegraXor that is offering it's SVG SCADA User Interface for Souliss, so now people can drawn their own interface in Inkscape and then control over it their home.

This release is a new starting point for the project.

As usual, more information on our website and now also on twitter @soulissteam.

Please consider to contribute to the project, there are many ways: use Souliss and report improvement and bugs, be a Souliss evangelist, write documentation or tutorial or examples, write code or improve actual features.

Regards,
Dario.