How to use the Default function for processing actuator commands from the Cayenne Dashboard


Sending MQTT messages to the broker/dashboard works.
But I have no idea how to use the Default function for processing actuator commands from the Cayenne Dashboard.
I want to set an level in my Arduino sketch by a slider from dashboard.


Can you post the code you have so far?


I have uploaded the file ControllinoLight-R.txt (had to change .ino to .txt for download).
Sending works.

Another point: I see the MQTT client in in the WebGUI on my PC but not on my Android.
Second question: How can I subscribe the MQTT messages sent to Cayenne from another Linux device by mosquitto for example. I do not know the topics


So the WebGUI should look like and work.

  Switching Power Plugs dependent of ambient light by CONTROLLINO
  Light Sensor is a photo resitor connected to A1.     |--/\/\/\--|--/\/\/\--- VCC
  Power Plugs are switched by Relais_00 and _01                    A1
  Created by: Claus Kühnel 2017-02-08
#include <Controllino.h>
#include <Wire.h>
#include "Arduino.h"

#define CAYENNE_PRINT Serial
#include <CayenneMQTTEthernet.h>

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard (BYOD).
char username[] = "";
char password[] = "";
char clientID[] = "";

int SWITCH_ON = 200;  // higher values mean more light
int light = 0;
boolean state = false; // false means R0 off

void setup() 
  /* Here we prepare D0, R0, and R1 as output, A1 as input */

  /* Here we initialize serial at 115200 baudrate for reporting */
  while (!Serial); // wait for conecting monitor
  Serial.println("\n\nLight Control MQTT");

  /* If we are using Controllino MEGA, we want to try using non arduino supported pins, so we initialize them */
    /* We need to set direction of all pins to output (1). We are going to use pins PD4(D20), PD5 (D21), PD6(D22) and PJ4(D23) and set them to low*/
    DDRD |= B01110000;
    DDRJ |= B00010000;$
    PORTD &= B10001111;
    PORTJ &= B11101111;
  /* When using Controllino MEGA or MAXI we have access to /OVL pin and RS458 /RE DE pins */
  #if defined(CONTROLLINO_MAXI) || defined(CONTROLLINO_MEGA)
    /* Direction for /RE (PJ5) DE (PJ6) pins is output (1). For /OLV (PE7) its input (0) */
    DDRJ |= B01100000;
    DDRE &= B01111111;
    PORTJ &= B10011111;
    Serial.print("/OVL: "); Serial.println(PINE >> 7);
  // Connect to Cayenne MQTT broker
  Cayenne.begin(username, password, clientID);
  /* Now we report start of application */
  Serial.println("Starting CONTROLLINO application now");

void loop() 
   /* We set digital output D0 to low voltage */
  digitalWrite(CONTROLLINO_D0, HIGH);

  float volt = (5.0 * analogRead(A1) * 100.0) / 1024;
  Serial.print("Res:   "); Serial.println(volt);
  Serial.print("State: "); Serial.println(state);

  if (state == false)
    if (volt < SWITCH_ON) 
      state = !state;
      digitalWrite(CONTROLLINO_RELAY_00, HIGH);
      Serial.println("Lamps on");
      Cayenne.virtualWrite(0, state);
      Cayenne.virtualWrite(1, volt);
  if (state == true)
    if (volt > SWITCH_OFF) 
      state = !state;
      digitalWrite(CONTROLLINO_RELAY_00, LOW);
      Serial.println("Lamps off");
      Cayenne.virtualWrite(0, state);
      Cayenne.virtualWrite(1, volt);
  digitalWrite(CONTROLLINO_D0, LOW);

//Default function for processing actuator commands from the Cayenne Dashboard.
//You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
  CAYENNE_LOG("CAYENNE_IN_DEFAULT(%u) - %s, %s",, getValue.getId(), getValue.asString());
  //Process message here. If there is an error set an error message using getValue.setError(), e.g getValue.setError("Error message");