In the mysensors 1.5 version the Esp8266 WiFi gateway was developed. It gave us the possibilities to send mysensors data over the network. Until now the mysensors plugin only supports serial access. A workaround was developed by @Anduril and a friend of him using socat.
In the mysensors 2.0 development branch (beta version; be careful) a GatewayESP8266MQTTClient.ino has been developed.
It is a mysensors gateway that sends the data from the nodes to an MQTT broker. This MQTT broker, for example mosquitto, can run on your pimatic host (or another 24/7 server) and pimatic can connect to it via the MQTT plugin, further developed by @wutu.
Install an MQTT broker
(In this example mosquitto and almost identical to @wutu’s post)
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
for wheezy: sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
for jessie: sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
apt-get update
apt-get install mosquitto
sudo /etc/init.d/mosquitto start
Compile and flash your Esp8266
I will not describe the mysensors part in detail as that is explained in this mysensors forum topic.
Remarks:
- A development board can be easily flashed via USB, for “non-USB” versions see inside the sketch or other info “everywhere”.
- The wiring is exactly the same as described in the Esp8266gateway article.
- I left the subscribe and publish topics unchanged.
In the GatewayESP8266MQTTClient.ino you will find
// Set this nodes subscripe and publish topic prefix
#define MY_MQTT_PUBLISH_TOPIC_PREFIX "mygateway1-out"
#define MY_MQTT_SUBSCRIBE_TOPIC_PREFIX "mygateway1-in"
For sensors you use the Publish topic mygateway1-out
.
For writing to an actuator you use the subscribe topic mygateway1-in
If you have mosquitto running and your gatewayesp8266mqttclient running and correctly configured, you can follow the measurements in the terminal on your raspi (there are also several java/web/android clients).
If you also used the default publish and subscribe topic you can enter the command mosquitto_sub -v -t 'mygateway1-out/#'
This will show you the messages sent from the networkand you will see something like:
mygateway1-out/2/0/1/0/0 12.3
mygateway1-out/2/0/1/0/0 14.7
mygateway1-out/2/0/1/0/0 13.6
mygateway1-out/2/255/3/0/0 84
mygateway1-out/2/0/1/0/0 12.3
mygateway1-out/2/0/1/0/0 11.2
The line “mygateway1-out/2/0/1/0/0” contains in this case the temperature from node 2 sensor 0.
The line “mygateway1-out/2/255/3/0/0 84” contains in this case the battery percentage from node 2 sensor 255.
Configure Pimatic
I have only one MQTT broker in my network so I define the host/port settings in the plugin (but you can also do it in the device part of the sensor. See @wutu’s post).
{
"plugin": "mqtt",
"host": "192.168.144.128",
"port": 1883
}
Configure Sensor
I have a battery powered Pro Mini with a waterproof ds18b20 sensor connected in a watertight enclosing in my garden, and the battery percentage is measured as well ( @sweebee’s library include files).
It is setup as below in the config.json
{
"class": "MqttSensor",
"id": "EspMMQTTnode2",
"name": "Tuin",
"attributes": [
{
"name": "tuin temperatuur",
"topic": "mygateway1-out/2/0/1/0/0",
"type": "number",
"unit": "°C",
"acronym": "Temperatuur"
},
{
"name": "tuin batterij",
"topic": "mygateway1-out/2/255/3/0/0",
"type": "number",
"unit": "%",
"acronym": "Batterij"
}
]
},
“mygateway1-out/2/0/1/0/0”: out for getting data out of the network.
“mygateway1-out/2/0/1/0/0”: node 2, sensor 0
"mygateway1-out/2/0/1/0/0": 1 for “get”
“mygateway1-out/2/0/1/0/0”: no ACK requested/required
"mygateway1-out/2/0/1/0/0": No subtype required
And for the battery:
“mygateway1-out/2/255/3/0/0”: 255 for the sensor, 3 for internal message type.
Below my pimatic screen with the temperature and battery value via the Gateway8266MQTTclient to the MQTT plugin.
Configure Switch/Actuator
In this case a relay which is a “binary switch”. All “things” that simply switch on or off are now considered binary switches. So a dimmer needs a different config.
So in pimatic I need an MqttSwitch for my relay:
{
"name": "MQTT Relay Switch",
"id": "Relayswitchnode15",
"class": "MqttSwitch",
"topic": "mygateway1-in/15/1/1/0/2",
"onMessage": "1",
"offMessage": "0"
}
“mygateway1-in/15/1/1/0/2”: in for writing to (into the mysensors network)
“mygateway1-in/15/1/1/0/2”: node id 15, sensor 1
"mygateway1-in/15/1/1/0/2": 1 for “set”
“mygateway1-in/15/1/1/0/2”: no ACK requested/required
"mygateway1-in/15/1/1/0/2": 2 for subtype V_STATUS
As the set command “1” is given, the status is set to on or off. The onMessage/offMessage of the MqttSwitch does the rest.
See switch below in pimatic