MQTT

From RevSpace
Jump to navigation Jump to search

Brokers

In MQTT-land heet een server een "broker" en een verbinding tussen twee servers heet een "bridge". We gebruiken 4 brokers (allemaal mosquitto) met daartussen bridges:

intern: mosquitto.space.revspace.nl (op gateway)

Op de server gateway draait de primaire broker. Deze maakt uitgaande bridge-verbindingen naar revspace.nl en test.mosquitto.org.

Toegestane topics zijn:

revspace/#
Vergaarbak van allerhande sensors, knopjes, etc. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen en buiten het RevSpace-LAN.
revspace-local/#
Dingen die lokaal moeten blijven ivm privacy. Alles binnen dit topic wordt via de bridges gedeeld met brokers binnen het RevSpace-LAN.
shellies/#
In apparaatjes van het merk Shelly dit helaas hardcoded. We gebruiken scripts om de data te boetseren en te her-publishen naar handigere dingen onder revspace/#.
revdebug/#, zandbak/#
Bruikbaar voor debugdumps en projecten in test- of aanklootfase
zigbee2mqtt/#
In gebruik voor zigbee2mqtt. Deze dingen spreken een eigen JSON-gebaseerd protocol. Dit topic is read-only voor anonieme users om totale chaos te voorkomen

intern: ledbanner

De mosquitto op ledbanner maakt een enkele uitgaande bridge-verbinding naar gateway, zodat alle scripts op de Raspberry Pi gewoon met localhost kunnen verbinden. Dat gaat sneller en werkt ook als de ledbanner op reis is (gebeurt vrijwel niet meer) en dus niet in het RevSpace-LAN zit.

extern: revspace.nl

Geeft openbaar readonly toegang op revspace/# zodat iedereen kan meegenieten. Draait ook mqtt2web voor wat dynamische aanduidingen op de wiki.

extern: test.mosquitto.org

Geeft ook toegang op revspace/#, omdat het kan. Er is geen enkele zinnige reden om dit te doen, anders dan bijdragen aan de continue praktijktest van het mosquitto-project. Voor extern uitlezen van onze sensors e.d. kun je beter niet deze server gebruiken, hoewel het voor een totaal yoloding met een heleboel baggerdata erop een verbazingwekkend goede uptime heeft.

Live sensortjes gluren

https://revspace.nl/maquette/

Saaie informatie, redelijk achterhaald

Revspace currently pushes some MQTT/Moquitto messages to a mosquitto (mqtt) server running on mosquitto.revspace.nl. The messages are also bridged to the public test.mosquitto.org server. Since mosquitto also runs on IPv6, you can subscribe to the internal server (if you have ipv6)

We are currently using the namespace 'revspace/'

Under this namespace we currently send messages for:

  • revspace/sensors/co2 -- The current value on the co2 meter
  • revspace/sensors/#-t# -- Temperature sensor (Zone, Sensor-nr), Zone 2 is the basement
  • revspace/power/group##/minute -- Powerusage for this power group in W-h over the last minute (pulsecount / 2 * 60)
  • revspace/power/group##/hour -- Powerusage for this power group in W-h over the last hour (pulsecount / 2)
  • revspace/power/group##/pulse -- Fires once for every 0.5W-h of power used in the group
  • revspace/button/skip - skip button for the music
  • revspace/button/stop - stop button for the music
  • revspace/button/shuffle - shuffle-play for the music
  • revspace/button/vol_up - volume control for the music
  • revspace/button/vol_down - volume control for the music
  • revspace/button/nomz - NOMZ button pressed
  • revspace/state -- Space state (open|closed)
  • revspace/music/klusbunker/volume -- Music volume (0-100)
  • revspace/music/klusbunker/mode -- Music mode (play|stopped)
  • revspace/music/klusbunker/np -- Music: Now playing (artist/title)
  • revspace/spacesucker/level -- fan speed level in %
  • revspace/spacesucker/mode -- auto/manual/demoist/wait/refresh
  • many more (geiger/nose/cams/doorduino etc.), check it out!

Update 2014/04/26 Around 00:00 we switched from '/revspace/#' to 'revspace/#' ... to fit with the MQTT standard better

To receive/subscribe to these messages, install mqtt-simple using "cpan Net::MQTT::Simple" or "yum install perl-Net-MQTT-Simple", or download mosquitto-clients, or another MQTT library and write your own client.

For mosquitto-clients, use:

 (public server)
 mqtt-simple -h test.mosquitto.org -s "revspace/#"
 # Alternatively: mosquitto_sub -h test.mosquitto.org -t "revspace/#" -v

or:

 (revspace internal or ipv6 server)
 mqtt-simple -h mosquitto.space.revspace.nl -s "revspace/#"
 # Alternatively: mosquitto_sub -h mosquitto.space.revspace.nl -t "revspace/#" -v

For debian users... please use the following repository, as the packages in debian are ancient:

 http://mosquitto.org/2013/01/mosquitto-debian-repository/
 deb http://repo.mosquitto.org/debian wheezy main

Server Side Events

JavaScript example, see for example https://bewaar.me/mqtt/#

var stream = new EventSource('https://revspace.nl/mqtt?revspace%2F%23=');
stream.onmessage = function(e) {
  var data = JSON.parse(e.data);
  if (data.length !== 3) throw 'invalid data';
}

Scripts

  • The power monitoring script is 'powerconverter' and runs as 'power-mqtt' user on gateway
  • The music related events come from '/home/bar/squeezen/now-playing.pl' running as 'spaceloop' on gateway (klopt dit nog?)
  • The spacestate messages come from 'slmonitor', running as 'spaceloop' on gateway