In the last lecture we have seen the command message sent by Cayenne:
The MQTTfx client allows you to
Once the profile is created you can connect to Cayenne with the “connect” button.
You should see the “offline” note in on your Cayenne device page go away
Once connected we can start sending messages to Cayenne
Cayenne MQTT expects topics of the following form:
v1/username/things/clientID/data/channel
This tells Cayenne that “data” are going to be sent.
Replace “username” with your Cayenne user name and
“clientID” with the client ID of your device
We will send dummy temperature data to channel 0.
Therefore “channel” must be replaced by “0”.
The payload (the actual data) has the following form:
type,unit=value
In our case:
Type (temperature): temp
Unit (Celsius): c
Value: 29.3 (typical Ugandan temperature)
Our payload therefore becomes:
Temp,c=29.3
In order to see the command messages e.g. those
sent by the push button we must first subscribe to them.
The format of a subscription is:
v1/username/things/clientID/cmd/channel
Since our push button is connected to channel 3
this is what we define as channel
.
v1/88253c70-76e9-11e9-9636-f9904f7b864b/things/
1ce44ea0-76ea-11e9-b4eb-6bf2c2412b24/cmd/3
Normally we would treat the command by acting on the hardware.
If this was successful we would inform Cayenne that the new value was set:
Format:
v1/88253c70-76e9-11e9-9636-f9904f7b864b/things/
1ce44ea0-76ea-11e9-b4eb-6bf2c2412b24/data/3
and the topic would be the new value: in this case: 1
With this information we understand how the Cayenne MQTT client works:
A big number of data types is defined in the Cayenne MQTT protocol
Have a look at the docs under”Supported data types”:
https://mydevices.com/cayenne/docs/cayenne-mqtt-api/#cayenne-mqtt-api-mqtt-messaging-topics
Only the most basic ones are implemented in our client:
The same is true for the units, here are the ones defined in the client:
In session 2 we have seen how to readout sensors and control actuators
Now we have seen how to publish and how to subscribe to Cayenne messages
We have to combine those two in order to create a full cayenne IoT node.
This is a little more tricky:
We have to create a callback function
and register it with the Cayenne MQTT client
When the push button or slider on Cayenne
are activated this function will be called
The function must find out from which channel
the request is coming, and which are the data
It must then act on the hardware correspondingly
The Cayenne MQTT client sends a response message
without our intervention
The graphical user interface of Cayenne is fairly limited.
Can we write an application with another GUI system interacting
with our devices connected to the Cayenne MQTT broker?
Example:
The WeMos D1 buzzer.
We want to play a song from a list of choices.
The Cayenne MQTT C library contains everything we need
to communicate with the Cayenne MQTT broker:
There is still work for you during the exercises session to
make you IoT node work with Sensor readout
Publishing the result on Cayenne (for the SHT30)
Subscribe to a command message from the Cayenne slider
to modify the settings of a colour component of your WS2812 rgb LED
For further study please consult:
https://afnog.iotworkshop.africa/do/view/AFNOG/AFNOGWorkshop2019
You will find plenty examples on
https://github.com/uraich?tab=repositories
I | Attachment | History | Action | Size | Date | Who | Comment |
---|---|---|---|---|---|---|---|
![]() |
CayenneSHT30Publish.png | r1 | manage | 67.3 K | 2019-05-24 - 08:11 | UliRaich | |
![]() |
QtBuzzer.png | r1 | manage | 22.8 K | 2019-05-24 - 08:15 | UliRaich | |
![]() |
cayenneCmdMsg2.png | r1 | manage | 68.6 K | 2019-05-24 - 07:38 | UliRaich | |
![]() |
cayenneDataTypes.png | r1 | manage | 33.1 K | 2019-05-24 - 08:08 | UliRaich | |
![]() |
cayenneSHT30Publish1.png | r1 | manage | 82.0 K | 2019-05-24 - 08:11 | UliRaich | |
![]() |
cayenneUnits.png | r1 | manage | 24.3 K | 2019-05-24 - 08:08 | UliRaich | |
![]() |
mqttfxBaseWindow.png | r1 | manage | 27.5 K | 2019-05-24 - 07:38 | UliRaich | |
![]() |
mqttfxButtonOn.png | r1 | manage | 140.6 K | 2019-05-24 - 07:38 | UliRaich | |
![]() |
mqttfxCmd.png | r1 | manage | 90.3 K | 2019-05-24 - 07:38 | UliRaich | |
![]() |
mqttfxCredentials.png | r1 | manage | 60.2 K | 2019-05-24 - 07:45 | UliRaich | |
![]() |
mqttfxPubCayenne.png | r1 | manage | 152.2 K | 2019-05-24 - 07:53 | UliRaich | |
![]() |
mqttfxPublish.png | r1 | manage | 37.2 K | 2019-05-24 - 07:39 | UliRaich | |
![]() |
mqttfxResponse.png | r1 | manage | 32.5 K | 2019-05-24 - 07:39 | UliRaich | |
![]() |
mqttfxSubscribe.png | r1 | manage | 54.6 K | 2019-05-24 - 07:39 | UliRaich | |
![]() |
mqttfxWaiting.png | r1 | manage | 143.4 K | 2019-05-24 - 07:58 | UliRaich | |
![]() |
mqttfxcredFromCayenne.png | r1 | manage | 155.7 K | 2019-05-24 - 07:45 | UliRaich |