This is an old revision of the document!


r3 MQTT Topics

A go-module and exact definitions of current r3events can be found at github: https://github.com/realraum/door_and_sensors/tree/master/r3events

A guide on mqtt essentials: http://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices

Broker

mqtt.realraum.at:1883 (reachable only in local realraum network)

Topics currently in use

Topics can be retained by the message broker. In this case, the most recent event for that topic is sent to a client immediately upon subscription of that topic.

Topic Retain Description
Sensor Messages
realraum/frontdoor/lock True Frontdoor locked or not
realraum/frontdoor/ajar True Frontdoor ajar or shut
realraum/frontdoor/cmdevt False Command that was sent to the frontdoor and by whom
realraum/frontdoor/problemevt False Problem that occured at the frontdoor
realraum/frontdoor/manuallockmovement True If the frontdoor was locker / unlocked by hand
realraum/frontdoor/rawfwlines False raw communication between door_client and door_daemon
realraum/pillar/boredoombuttonpressed False indicates the BoreDOOOOOOMButton has been pressed
realraum/pillar/temperature True LoTHR Temperature, DHT11 Sensor
realraum/pillar/illumination True
realraum/pillar/dust True currently nonexistant Dust Sensor
realraum/pillar/relhumidity True LoTHR Humidity, DHT11 Sensor
realraum/pillar/movement False PIR Movement Sensors on Arduino on Beaglebone in LoTHR, one event per detected movement
realraum/backdoorcx/movement False currently nonexistant future PIR Movement Sensor in CX
realraum/olgafreezer/temperature False OlgaFreezer DS18B20 Temp Sensors
realraum/olgafreezer/overtemp False
realraum/olgafreezer/sensorlost False Triggered if a olgafreezer sensor stopped transmitting data
realraum/backdoorcx/temperature True Temperature in CX, between Network, Backdoor and WC
realraum/backdoorcx/lock False no sensor, does not exist
realraum/backdoorcx/ajar True Backdoor Ajar Sensor
realraum/backdoorcx/gasalert False Sent if LPG/Gas-Alert on CX-Ceiling is triggered
realraum/backdoorcx/powerloss False Sent if UPS connected to smsgw.realraum.at reports powerloss, power-regained or change in battery charge
realraum/gateway/NetDHCPACK False not-implemented. Info about new DHCP client in network.
realraum/gateway/NetGWStatUpdate True not-implemented. TODO1). regular updated network statistics
realraum/lasercutter/cardpresent True indicateds if and who's card actives the lasercutters's laser
Meta Events
realraum/metaevt/presence True Indicates if someone is present in realraum. Sent everytime presence status changes. .Meta-Event generated by 'r3-metaevt-maker'
realraum/metaevt/overtemp False Meta-event triggered if a temperature sensor exceeds a warning threshold
realraum/metaevt/sensorlost False Meta-event triggered if a sensor stopped transmitting data
realraum/metaevt/realmovement False Tries to distinguish between real movement and spurious sensor errors
realraum/metaevt/duskordawn False Meta-event that indicates Sunset, Sunrise, astronomical dawn, nautical dawn, civil dawn.
realraum/metaevt/TempSensorSpike False not-implemented. TODO. Meta-event that triggers if a temperature sensor's value rises above its running average standard deviation –> possible Fire
realraum/metaevt/DustSensorSpike False not-implemented. TODO. Meta-event that triggers if a dust sensor's value rises above its running average standard deviation –> possible Fire
Action Requests
action/rf433/sendcode3byte False Tell RF433 Transmitters to transmit the attached 3byte code over the air to powerplugs
action/rf433/setdelay True Tell Sender at *Location X* to wait *DelayMs* until sending a command receivce via sendcode3byte 2)
action/yamahastereo/ircmd False Send command to ir-emitter for yamaha stereo (list of named commands)

level0/level1/level2/level3/….

Level Content
0 realraum (indicates sensor information) or
action (indicates a request for action)
1 clientID. Either ID of sender (if topic[0] == realraum) or ID of recipient (if topic[0] == action)
Future use: access restrictions for topics of +/clientid/# to senders with the correct clientid
2 uniquely identifies the type and format of the payload. E.g. means is directly maps to a certain json object structure
3 optional. Could be used to distinguish between several types of sensors of the same type at the same location, subcommands, etc

Clients, aka 1st level topics

ClientID on Host Description Image
frontdoor torwaechter.mgmt.realraum.at ALIX Board mounted on the front door
backdoorcx mqtt.realraum.at MinimusAVR connected to smsgw.realraum.at and running backdoorcx_sensor_node binary. Located in CX/Network
GoLightCtrl licht.realraum.at RaspberryPi serving http://licht.realraum.at/switch.html site and sending rf433cmd mqtt messages. Sits on top shelf next to beamer in LoTHR. Connected to Ceilinglightcontrolbuttons.
pillar kiosk.realraum.at arduinosensor.py script running on BeagleBone kiosk.realraum.at, located between pillar in LoTHR and the window glas.
xbee kiosk.realraum.at xbeesensor.py script running on BeagleBone kiosk.realraum.at, connects to XBEE temperature and humidity sensors outside or cellar
olgafreezer mqtt.realraum.at Arduino+NetworkShield POE-powered TemperatureDisplay next to freezer in OLGA. smsgw.realraum.at runs a sensornode called olga_freezer_sensordata_forwarder.py
metaevt mqtt.realraum.at Metaevents generated from other events by r3-metaevt-maker binary running on mqtt.realraum.at
gateway gw.realraum.at ALIX board gw.realraum.at, located in CX/Network
lasercutter lasercutter.mgmt.realraum.at RaspberryPI1 used for accesscontrol to the lasercutter. Mounted on the lasercutter.
xmppbot mqtt.realraum.at The binary r3-xmppbot running on mqtt.realraum.at. Possible future backchannel for xmpp-bot
rf433 kiosk.realraum.at Action Destination for rf433 powerplug-control transmitters
yamahastereo kiosk.realraum.at Action Destionation to control the YamahaStereoReceiver/Amplifier in LoTHR
ircchanbot dhcp-12.realraum.at IRC Bot running on verr's raspberryPI2 (thinkpi) on the shelf next to the beamer

2nd level topics and payload types

see e.g. basicevents to get a feel for a payload message structure.

Ts stands for timestamp and should be a int64 value of seconds since the epoch at the time the event occured.

2nd Level Topic Payload Type Payload Type Format
Sensor Messages
lock JSON Object {“Locked”:bool, “Ts”:int64}
ajar JSON Object {“Shut”:bool, “Ts”:int64}
cmdevt JSON Object {“Command”:string, “Using”:string (“Card”,“Button”,“ssh”,…), “Who”:string, “Ts”:int64}
problemevt JSON Object {“Severity”:int, “Problem”:string “Ts”:int64}
manuallockmovement JSON Object {“Ts”:int64}
rawfwlines string
boredoombuttonpressed JSON Object {“Ts”:int64}
temperature JSON Object {“Location”:string, “Value”:float64 (°C), “Ts”:int64}
overtemp JSON Object {“Location”:string, “Value”:float64 , “Threshold”:float64, “Ts”:int64}
illumination JSON Object {“Location”:string, “Value”:int64 , “Ts”:int64}
dust JSON Object {“Location”:string, “Value”:int64 , “Ts”:int64}
relhumidity JSON Object {“Location”:string, “Percent”:float64 , “Ts”:int}
gasalert JSON Object {“Ts”:int64}
powerloss JSON Object {“OnBattery”:bool, PercentBattery:float, LineVoltage: float, LoadPercent: float, “Ts”:int}
NetDHCPACK JSON Object {“Mac”:string, “IP”:string, “Name”:string, “Ts”:int} TODO
NetGWStatUpdate JSON Object {TODO, “Ts”:int64}
cardpresent JSON Object {“IsHot”:bool, “Who”:string(name of user), “Ts”:int}
foodorderrequest JSON Object {“Who”:string, “Preference”:string, “Ts”:int}
foodorderinvite JSON Object {“Who”:string, “Where”:string, “URL”:string (http or phone), “Ts”:int64}
foodordereta JSON Object {“TSofInvite”:int64, “ETA”:int64, “Ts”:int}
Meta Events
presence JSON Object {“Present”:bool, “Ts”:int64}
realmovement JSON Object {“Movement”:bool, “Confidence”:uint8, “Ts”:int} largely useless
overtemp JSON Object {“Location”:string, “Value”:float, “Threshold”:float, “Ts”:int}
sensorlost JSON Object {“Topic”:string, “LastSeen”:int, “UsualInterval”:int64, “Ts”:int}
duskordawn JSON Object {“Event”: string,“HaveSunlight”:bool, “Ts”:int}
TempSensorSpike JSON Object {“Location”:string, “Value”:float64, “Ts”:int}
DustSensorSpike JSON Object {“Location”:string, “Value”:int64, “Ts”:int}
Action Requests
sendcode3byte JSON Object {“Code”:[3]byte, “Ts”:int64}
setdelay JSON Object {“Location”:string, “DelayMs”:int64, “Ts”:int64}
ircmd JSON Object {“Cmd”:string, “Ts”:int64}

1)
equinox doesn't like this™ so may never be implemented
2)
currently not used, even though implemented
realraum Graz, Brockmanngasse 15, 8010 Graz, realraum - Verein für Technik in Kultur und Gesellschaft
  • /var/lib/dokuwiki/data/attic/roomauto/mqtt_topics.1456064178.txt.gz
  • Last modified: 2016-02-21 15:16
  • by xro