My own MySensors gateway

As earlier posts described, i’m fascinated over the project ”MySensors”. However, I will not replace my setup of the openHAB server and my MQTT-implementation (using RabbitMQ). This made me start thinking of how I could achieve the goal of having one (or many) MySensors networks included in my openHAB/MQTT system.

One important criteria was that any software that I would create must be multi platform capable. My primary development environment is Mac OSX, but the servers are running primarily Linux. My decision fell on Java and the journey in Eclipse began.

The application is still in the pre-alpha state and it aims to implement MySensors protocol and send this forward to channels that are implemented. Since my plan included MQTT, the one (and only) channel that is implemented now is the MQTT Channel. However, the project has a well defined interface so any other channels could easily be added in the future. The application also rely on a persistence implementation which holds the nodes and the sensors included in the sensor network. Also their ”last sensor value” is kept in the persistence layer in order to be able to respond back to any sensor requesting their ”last known value”.

The application is roughly separated in:

* Start-up code which parses the XML-configuration and executes 1..n SensorGatewayCommunicaotr. By making the application in this way, it is able to connect to many Sensor networks (buildings, different customers, etc) and send them independently to the configured Chanels.

* SensorGatewayCommunicator is the class that holds the intelligence of handling data from the sensors. It communicates with a sensor network via an IP-connection to a serial to IP-gateway (Ser2Net on a RPi for example). This is a ”early solution” which will be handled better in the future. For example via an IP enabled Arduino.

* Channels are the delivery channels on which events from MySensors network are ”forwarded”. In my thoughts, the application should grow in number of implemented channels. One is of course MQTT.

* Persistence is responsible for persisting nodes and sensors on the network. Today MySQL/MariaDB is the only supported persistence implementation.

* MySensors packages are Events, Messages,  Sensors as shown in the image below. This is an abstraction and implementation of the items and ”things” that exists as artifacts in MySensors.

Below is a raw screenshot from Eclipse showing the actual file structure state of the project.

SensorsToMQTT

I have many thoughts on how to extend this application. My vision is to have MySensors as one ”input” but I also would like to add other ”inputs”. For example converting my Delphi application for the Visonic PowerMax alarm integration into this application. Would then of course also use the Channels implementation and persistence possibilities in some kind.  Anyway, the entire project will be open sourced and available on GitHub in a near future.

As of today – the following things ”works”:

* Inclusion of new nodes

* Requesting IDs from SensorsToMQTT

* Receiving values from sensors

* Handle presentation events

* Sending Metrics answer

* (almost) Sending back replies regarding ”last known value” of a sensor

As a last evidence 🙂 – here are two rooms which now has sensor nodes that publishes data over the sensor network. Of course SensorToMQTT java application is responsible for publishing sensor values on the MQTT bus in order for openHAB to use them!

bild

Please feel free to comment on any thoughts/question! I will publish more information in this topic!

The newborn Java Jedi 😉

3 thoughts on “My own MySensors gateway

  1. Hej,

    Jag hittade din blog av en slump. Jag har försökt lösa ett problem med openHab och en DHT-2301-sensor men hittar inget på Google så jag måste fråga, eftersom du verkade ha koll. Värt ett försök iaf.

    Problemet är att de flesta tycks använda arduino’s, MQTT och andra tekniker för att läsa/skicka datan från sensorer. Jag har inte hunnit mecka så mycket med mina arduinos och tänkte köra min DHT på min Pi som ändå kör openHab. Jag lyckas läsa av den via python (har följt en guide här https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/software-install-updated). Men vet inte hur jag ska göra med items och sitemap för det blir knepigt med exec binding och pythonscript. Dels krävs väl root/sudo för python, dels vet jag inte hur jag isf skulle parsa resultatet till sitemapen. Har du några tips? Det ska ju gå att läsa av den i C också förstås, och jag vill gärna ha en sensor på Pi’n om den ändå är igång så att säga. Sen kan jag läsa på och komplettera med mina arduino’s och andra mikrokontrollers senare efterhand som jag lär mig. Men just här har jag kört fast.

    Jag lämnar inte min riktiga e-post här så svara gärna genom en kommentar 🙂

    1. Hej, kul!

      Jag gissar att jag faller i fållan med MQTT där. Vad jag gjort är att jag baserat mina sensorer på MySensors-projektet som är helt fantastiskt tycker jag. När jag skrev min egen gateway (som finns på github) så fanns det inte andra alternativ. Vad jag tog fram var helt enkelt en programvara som pratar med Arduino Gateway (som får data från alla Arduinosensorer) och sedan omvandlade detta till MQTT-meddelande. Genom att göra den omvandlingen kunde jag få in data i openHAB. I ditt fall låter det som att du kommit en bra bit genom att läsa av datan, sedan skulle jag rekommendera dig att gå mot en MQTT (sätt upp en egen mosquito-mqtt-server) och skicka ut data från din python-kod. På så sätt kan du sedan i openHAB skapa items för respektive ”MQTT-topic”/enhet. Gör ju det hela bra utifrån att du inte blir låst till ett enda hemautomation-system också 🙂

      Hojta till om du har några frågor!

  2. Låter som en bra idé. Jag har tänkt läsa in mig på MQTT och kommer att köra en mosquito-server som jag redan hittat bra information om. Det verkar vara den bäst lösningen för mitt ändamål och passar även mina esp8266or som jag nyss köpt 🙂

    När det gäller sensorn som jag hade över och ville ha direkt i Pi’n som kör openHab föll det på att läsa av den med C och därmed kan jag köra en exec binding från openHab så det blev riktigt bra. Har lite problem med den dock. Det är en DHT 2301 och jag kör den på 5 volt men ibland spottar den ut ”data not good” vilket skjuter min data 4 kolumner åt höger. Det innebär att luftfuktigheten ibland matas ut fyra steg åt höger där temperaturen normalt ska vara i strängen, så i openHab blir det ibland samma värde på både temperatur och luftfuktighet vilket är lite jobbigt. Har ingen bättre lösning att filtrera ut datan på heller, så blir det när man inte är programmerare utan bara copy pastare 🙂

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *