diff --git a/ampel-firmware/ampel-firmware.ino b/ampel-firmware/ampel-firmware.ino
index c9eeb1e5dc2d0fd1ea2b669b38ce286d468fe540..3fdfbd0af2fa535961b2b0efa0d9e986db3dfa45 100644
--- a/ampel-firmware/ampel-firmware.ino
+++ b/ampel-firmware/ampel-firmware.ino
@@ -149,10 +149,7 @@ void loop() {
 
   if (Serial.available() > 0) {
     commandString = Serial.readStringUntil('\n');
-    Serial.print(F("OHHHH. It would be cool to do something with : '"));
-    Serial.print(commandString);
-    Serial.println("'");
-    sensor_commands::run();
+    sensor_commands::run(commandString.c_str());
   }
 
   if (sensor::processData()) {
diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp
index f341c95ef84152731a5d005dbf7278387c0c50cb..6707d5543c7a9aa332666aed2f02d7aa12373bcc 100644
--- a/ampel-firmware/co2_sensor.cpp
+++ b/ampel-firmware/co2_sensor.cpp
@@ -76,7 +76,7 @@ namespace sensor {
     Serial.print(F("Auto-calibration is "));
     Serial.println(config::auto_calibrate_sensor ? "ON." : "OFF.");
 
-    sensor_commands::defineCallback(printCO2, &co2);
+    sensor_commands::defineCallback("co2", printCO2, &co2);
   }
 
   //NOTE: should timer deviation be used to adjust measurement_timestep?
diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp
index 6845adc74b65677c6dc7f9c2544ce597a85d4431..5aa2d01f6b136543e4c978dacd4777f3cf74f283 100644
--- a/ampel-firmware/led_effects.cpp
+++ b/ampel-firmware/led_effects.cpp
@@ -83,7 +83,7 @@ namespace led_effects {
     pixels.setBrightness(config::max_brightness);
     LEDsOff();
 
-    sensor_commands::defineCallback(helloRing, 0);
+    sensor_commands::defineCallback("led", helloRing, 0);
   }
 
   void toggleNightMode() {
diff --git a/ampel-firmware/mqtt.cpp b/ampel-firmware/mqtt.cpp
index 143ed736ced5b9d94999147922973d4e919a0484..62c597ea82c577179c0814b70d00620df6d04de6 100644
--- a/ampel-firmware/mqtt.cpp
+++ b/ampel-firmware/mqtt.cpp
@@ -141,6 +141,8 @@ namespace mqtt {
       messageString += (char) message[i];
     }
     Serial.println("'.");
+    sensor_commands::run(messageString.c_str());
+    return;
 
     //TODO: Move this logic to a separate class, which could be used by Serial/MQTT/WebServer
 
diff --git a/ampel-firmware/mqtt.h b/ampel-firmware/mqtt.h
index 2899a9996bbf8d2a484f5fc79b619d9647ee70a7..76c8b9b9461f6eea8e71cc1a739fef5beb706aa6 100644
--- a/ampel-firmware/mqtt.h
+++ b/ampel-firmware/mqtt.h
@@ -4,6 +4,7 @@
 #include <Arduino.h>
 #include "config.h"
 #include "led_effects.h"
+#include "sensor_commands.h"
 #ifdef AMPEL_CSV
 #  include "csv_writer.h"
 #endif
diff --git a/ampel-firmware/sensor_commands.cpp b/ampel-firmware/sensor_commands.cpp
index 90e64f16f8fee69e52d414e2c6d9ce8acf0ab6e2..8ef85ba0472b4010f091e9d63f3249090a7e6d27 100644
--- a/ampel-firmware/sensor_commands.cpp
+++ b/ampel-firmware/sensor_commands.cpp
@@ -2,6 +2,7 @@
 
 namespace sensor_commands {
   const uint8_t MAX_CALLBACKS = 20;
+  const uint8_t MAX_COMMAND_SIZE = 20;
   uint8_t callbacks_count = 0;
 // A callback contains both a function and a pointer to arbitrary data
 // that will be passed as argument to the function.
@@ -14,19 +15,29 @@ namespace sensor_commands {
   };
 
   Callback callbacks[MAX_CALLBACKS];
+  char callback_names[MAX_CALLBACKS][MAX_COMMAND_SIZE];
 
-  void defineCallback(void (*f)(void*), void *d) {
+  void defineCallback(const char *command, void (*f)(void*), void *d) {
     if (callbacks_count < MAX_CALLBACKS) {
-      callbacks[callbacks_count++] = Callback(f, d);
+      callbacks[callbacks_count] = Callback(f, d);
+      strlcpy(callback_names[callbacks_count], command, MAX_COMMAND_SIZE);
+      callbacks_count++;
     } else {
-      Serial.println("OH NOOEEEESSS!!!! TOO MANY CALLBACKS");
+      Serial.println(F("Too many callbacks have been defined."));
     }
   }
 
-  void run() {
+  void run(const char *command) {
+    Serial.print(F("Received command : '"));
+    Serial.print(command);
+    Serial.println("'");
     // Test all the callbacks.
     for (uint8_t i = 0; i < callbacks_count; i++) {
+      Serial.print("Trying '");
+      Serial.print(callback_names[i]);
+      Serial.println("'");
       callbacks[i].function(callbacks[i].data);
     }
+    Serial.println("Done.");
   }
 }
diff --git a/ampel-firmware/sensor_commands.h b/ampel-firmware/sensor_commands.h
index 81783f8e8be19ef9b7145a826fae582b1bc1efd8..e94ec31bba611db2791af8cf9e5a0c1814b62c7a 100644
--- a/ampel-firmware/sensor_commands.h
+++ b/ampel-firmware/sensor_commands.h
@@ -6,6 +6,6 @@
  */
 
 namespace sensor_commands {
-  void run();
-  void defineCallback(void (*f)(void*), void *d);
+  void run(const char *command);
+  void defineCallback(const char *command, void (*f)(void*), void *d);
 }